我很惊讶地发现,在didFinishLaunchingWithOptions
内,[UIApplication sharedApplication].keyWindow.rootViewController
的调用会返回nil
。
我想在应用程序启动时设置一些我需要引用rvc的东西,但是这种行为意味着我必须在其他地方执行此操作。
如果无法在didFinishLaunchingWithOptions
中完成,则唯一的另一个选择是applicationDidBecomeActive
?但是有一个额外的刺激(一个小的刺激,但你认为它不应该是必要的)必须有一个标志,以确保设置步骤只发生一次而不是每次appliationDidBecomeActive
是调用。
是否有其他地方我可以在应用启动时访问rootViewController
以设置一次额外的步骤?
答案 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及更高版本中,屏幕外视图控制器的视图永远不会被卸载。