在使用故事板时OS何时设置rootViewController?

时间:2014-02-13 18:20:35

标签: ios lifecycle

我很惊讶地发现,在didFinishLaunchingWithOptions内,[UIApplication sharedApplication].keyWindow.rootViewController的调用会返回nil

我想在应用程序启动时设置一些我需要引用rvc的东西,但是这种行为意味着我必须在其他地方执行此操作。 如果无法在didFinishLaunchingWithOptions中完成,则唯一的另一个选择是applicationDidBecomeActive?但是有一个额外的刺激(一个小的刺激,但你认为它不应该是必要的)必须有一个标志,以确保设置步骤只发生一次而不是每次appliationDidBecomeActive是调用。

是否有其他地方我可以在应用启动时访问rootViewController以设置一次额外的步骤?

2 个答案:

答案 0 :(得分:1)

你可以从窗口获取它:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController *rootViewController = self.window.rootViewController;

    return YES;
}

答案 1 :(得分:1)

在应用程序生命周期中当时没有keyWindow,因此没有rootViewController加入keyWindow的原因是因为keyWindow是{{ 1}}。但是,应用代表拥有nil的属性,因此您可以获得window

但是,如果您始终拥有相同的根视图控制器,则可能至少在根视图控制器的self.window.rootViewController方法中执行您想要执行的操作(可能全部操作)。这通常应该只调用一次,因为在iOS 6及更高版本中,屏幕外视图控制器的视图永远不会被卸载。