这是演示,我在RootViewController
中设置了didFinishLaunchingWithOptions
,但是没有调用viewController
的{{1}}!我猜是因为viewWillAppear
添加了NavigationController
导致消息的响应链失败了?
我知道应该将其设置为
ViewController
但是我想知道我要设置的内容
self.window.rootViewController = navigationController
为什么不叫self.window.rootViewController = mainViewController
的{{1}}?谢谢。
mainViewController
viewController.m
viewWillAppear
答案 0 :(得分:1)
嗯...有趣。
保留以下内容:
[[UINavigationController alloc] initWithRootViewController:mainViewController];
即使不使用它,似乎仍在窃取ViewController's
viewDidAppear
。
如果您注释该行,那么它将按需要工作。
即:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
ViewController *mainViewController = [[ViewController alloc] init];
//Comment the navigationController instantiation
//UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = mainViewController;
[self.window makeKeyAndVisible];
return YES;
}
也许navigationController
被设置为拥有ViewController
,但由于它没有显示在屏幕上,因此viewDidLoad
和viewDidAppear
都不会出现,但要等到以后。当您将ViewController
重新分配给窗口时,内部视图加载逻辑认为不再需要调用viewDidAppear
。
我不知道可能是错误还是故意的。
注意:我确实没有这种行为的原因。我只是了解造成问题的原因。