Ios 显示模式视图后设置rootViewController

Ios 显示模式视图后设置rootViewController,ios,objective-c,iphone,Ios,Objective C,Iphone,我有一个应用程序,如果它在后台的时间太长,我会重新初始化它。当用户在分配的时间后打开应用程序时,会发生重新初始化,我会在获取所需数据时显示启动屏幕。当我从服务器获取数据时,我将window.rootViewController属性设置为一个新值。如果旧的根视图控制器有一个视图控制器以模式显示,并且在重新初始化时显示该视图控制器,则不会在视图控制器上调用dealloc(我已经通过将NSLog放入dealloc方法来测试)。在没有显示模态视图控制器的情况下,将按预期调用dealloc 有人知道这个问

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


有人知道这个问题的解决方案吗?我不确定这是苹果的错误,还是我需要自己处理的问题。

您的模式视图是由rootViewController显示的(它的
presentingViewController
属性设置为rootViewController),这可能是问题的根源


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

您的模式视图由rootViewController显示(将
presentingViewController
属性设置为rootViewController)这可能是问题的根源


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

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

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

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

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

- (void)_dismissRootViewControllersModalViewsIfAny {
    UIViewController *rootViewController = self.window.rootViewController;
    if (rootViewController.presentedViewController || rootViewController.presentingViewController) 
    {
        [rootViewController dismissViewControllerAnimated:NO completion:nil];
    }
}
这是我创建的一个方法,它确保如果有一个模态视图控制器要关闭,它将被关闭