appDelegate设置rootViewController和viewWillAppear不会被调用吗?

时间:2018-07-17 07:53:09

标签: ios objective-c

这是演示,我在RootViewController中设置了didFinishLaunchingWithOptions,但是没有调用viewController的{​​{1}}!我猜是因为viewWillAppear添加了NavigationController导致消息的响应链失败了?

我知道应该将其设置为

ViewController

但是我想知道我要设置的内容

self.window.rootViewController = navigationController

为什么不叫self.window.rootViewController = mainViewController 的{​​{1}}?谢谢。

mainViewController

viewController.m

viewWillAppear

1 个答案:

答案 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,但由于它没有显示在屏幕上,因此viewDidLoadviewDidAppear都不会出现,但要等到以后。当您将ViewController重新分配给窗口时,内部视图加载逻辑认为不再需要调用viewDidAppear
我不知道可能是错误还是故意的。


注意:我确实没有这种行为的原因。我只是了解造成问题的原因。