我发现在viewDidLoad()
之前调用了didFinishLaunchingWithOptions()
,我正在寻找一些可以放置一些必须在viewDidLoad()
之前调用的初始化代码的东西。
有这样的地方吗?
此外,可以从其他地方调用viewDidLoad()。应该没问题,还是风险太大?
答案 0 :(得分:4)
你错了。
将NSLog直接放在方法标题下,您将看到ViewDidLoad直接调用。
[self.window addSubview:self.yourViewController.view];
所以,你要么使用viewDidLoad,要么使用它并不是很漂亮。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
甚至在ViewDidload
之前调用它答案 1 :(得分:1)
答案 2 :(得分:0)
当我使用MainWindow.xib文件添加我想要添加到窗口的视图控制器时,我遇到了类似的问题。
为了解决这个问题,我在app delegate的didFinishLaunchingWithOptions:方法中分配了窗口的rootViewController(你也可以调用addSubView,但是更好地分配rootViewController)。一旦你这样做,你可以很容易地把你想要的任何逻辑放在前面或后面的地方。它使您可以完全控制视图控制器加载的时间。相反,当通过笔尖加载视图控制器时,很难在它前面执行代码(如果可能的话)。我知道你在应用程序的plist中指定了主xib,但我不知道在加载nib之前是否有办法运行代码。
通常我会避免在xib中添加视图控制器。
我的代码看起来更像:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// special pre load logic here...
UIViewController *myVC = [[MyAwesomeViewController alloc] init];
self.window.rootViewController = myVC;
[myVC release];
// special post load logic here...
[self.window makeKeyAndVisible];
return YES;
}
答案 3 :(得分:0)
您可以在viewDidLoad中进行应用程序初始化,但是由于尚未设置边界或大小,因此此处不做任何设置。
在viewDidLayoutSubviews(在viewDidLoad之后调用)中进行操作。
我找到了这篇文章,这对我非常有帮助:
答案 4 :(得分:-2)
您可以将初始化代码放在类的init
方法中。
可以从其他地方再次致电viewDidLoad
。它就像任何其他方法一样。
修改强>
可以调用viewDidLoad
- 但是你应该小心内存管理。如果您在viewDidLoad
中分配对象,再次调用它将导致泄漏。因此,由于viewDidLoad
的典型功能,您可能希望将代码拉出到您将重复调用并从viewDidLoad
调用的另一种方法。