在呈现模式视图后设置rootViewController

时间:2015-07-17 22:47:03

标签: ios objective-c iphone

我有一个应用程序,如果它已经在后台运行了太长时间我重新启动应用程序。当用户在分配的时间之后打开应用程序时,重新初始化发生,并且在我获得所需数据时显示启动屏幕。当我从服务器获取数据时,我将window.rootViewController属性设置为新值。如果旧的根视图控制器已经以模态方式呈现了视图控制器,并且在重新初始化时正在显示该视图控制器,则在视图控制器上调用dealloc(我已经通过放置测试了这个在dealloc方法中的NSLog。在未呈现模态视图控制器的情况下,将按预期调用dealloc。

有谁知道这个解决方案?我不确定它是Apple的错误,还是我自己需要处理的事情。

2 个答案:

答案 0 :(得分:3)

我提出的解决方案是在设置RootViewController之前,我调用了

- (void)_dismissRootViewControllersModalViewsIfAny {
    UIViewController *rootViewController = self.window.rootViewController;
    if (rootViewController.presentedViewController || rootViewController.presentingViewController) 
    {
        [rootViewController dismissViewControllerAnimated:NO completion:nil];
    }
}

这是我创建的一个方法,它确保如果有一个模态视图控制器要关闭,它将被解除。

答案 1 :(得分:1)

您的模态视图由rootViewController呈现(它的presentingViewController属性设置为rootViewController),这可能是您问题的根源。

您可以将rootViewController设置为UINavigationController的实例,然后只使用其setViewControllers:animated:方法显示一个新实例化的视图控制器,而不是切换窗口的rootViewController。