我发现了一种情况,其中一些视图控制器的initWithCoder方法在应用程序委托中的应用程序didFinishLaunching方法之前被调用。 (我已经通过设置断点并查看了调用顺序来确认了这一点)

我正在使用情节提要。 UITabBarController是初始视图控制器。问题的一部分是情节提要板以未知顺序创建对象。也许是在应用启动完成之前创建视图控制器。

无论如何,问题在于我正在注册初始用户默认值。这必须在程序的任何部分查看它们之前发生。因此,我试图找到可以确保首先执行注册代码的地方。

有这样的地方吗?

注意:
该线程对此进行了一些讨论,但实际上并没有结论。

ViewDidLoad runs before AppDelegate didFinishLaunchingWithOptions gets executed!

最佳答案

初始化用户默认设置的标准方法是在应用程序委托中的“+(void)initialize”方法中:

+ (void)initialize
{
    if(self == [MyAppDelegate class]) {
        ...
    }
}

保证此方法可以在任何委托方法得到消息之前运行。

PS:在从该方法返回之前,我在didLaunch方法中实例化了一大堆viewController。

10-07 19:14
查看更多