iOS:设置rootViewController并不会删除旧呈现的视图控制器

时间:2017-08-17 15:27:58

标签: ios objective-c

我在objective-c应用程序中有一个loginViewController,用户在成功登录后显示homeViewController。这是我展示房屋的方式:

-(void) displayHome {
UIViewController * home = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"homeViewController"];
    _window.rootViewController = publicHome;
    [_window makeKeyAndVisible];
}

displayHome功能位于AppDelegate。之后,在homeViewController中,我使用

呈现一些视图控制器
[self presentViewController:controller animated:false completion:nil];

有时候我必须将用户重定向到loginViewController,所以我调用这个VC就像我在家中一样(通过设置rootViewController),以便删除所有其他视图。但是当我使用3d调试器时,我看到所呈现的视图就在那里。 为什么当我使用rootViewController设置loginViewController时,即使附加到homeViewController的{​​{1}},也不会删除显示的视图?

修改

一个例子:

假设从rootViewController(即homeViewController)我转到rootViewControllerviewController1)。现在,当我按下viewController1中的按钮时,我必须返回viewController1。在按钮操作中,这就是我所做的:

我打电话

loginViewController

[self dismissViewControllerAnimated:false completion:nil];

[appDelegate displayLogin];

当我调试时,我发现//AppDelegate -(void) displayLogin { UIViewController * login = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"homeViewController"]; _window.rootViewController = publicHome; [_window makeKeyAndVisible]; } 仍在这里。它在登录下。即使我设置viewController1

,为什么viewController1就在这里

2 个答案:

答案 0 :(得分:0)

也许您应该首先检查方法-dealloc是否已在您的UIViewControllers中执行。请尝试在viewController1中添加此代码:

- (void)dealloc {
    NSLog(@"ViewController %@ dealloc", NSStringFromClass([self class]));
}

如果尚未调用此方法,请在调用viewController1

后检查是否仍有任何指向[self dismissViewControllerAnimated:false completion:nil];的强引用

答案 1 :(得分:-1)

这通常是由于retaountount,检查你的实现并确保没有完成块或者不让dealloc被调用的东西。一旦你的dealloc被调用,所有视图都将被删除