我发现了一种情况,其中一些视图控制器的initWithCoder方法在应用程序委托中的应用程序didFinishLaunching方法之前被调用。 (我已经通过设置断点并查看了调用顺序来确认了这一点)
我正在使用情节提要。 UITabBarController是初始视图控制器。问题的一部分是情节提要板以未知顺序创建对象。也许是在应用启动完成之前创建视图控制器。
无论如何,问题在于我正在注册初始用户默认值。这必须在程序的任何部分查看它们之前发生。因此,我试图找到可以确保首先执行注册代码的地方。
有这样的地方吗?
注意:
该线程对此进行了一些讨论,但实际上并没有结论。
ViewDidLoad runs before AppDelegate didFinishLaunchingWithOptions gets executed!
最佳答案
初始化用户默认设置的标准方法是在应用程序委托中的“+(void)initialize”方法中:
+ (void)initialize
{
if(self == [MyAppDelegate class]) {
...
}
}
保证此方法可以在任何委托方法得到消息之前运行。
PS:在从该方法返回之前,我在didLaunch方法中实例化了一大堆viewController。