我在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
)我转到rootViewController
(viewController1
)。现在,当我按下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
就在这里
答案 0 :(得分:0)
也许您应该首先检查方法-dealloc
是否已在您的UIViewControllers中执行。请尝试在viewController1
中添加此代码:
- (void)dealloc {
NSLog(@"ViewController %@ dealloc", NSStringFromClass([self class]));
}
如果尚未调用此方法,请在调用viewController1
[self dismissViewControllerAnimated:false completion:nil];
的强引用
答案 1 :(得分:-1)
这通常是由于retaountount,检查你的实现并确保没有完成块或者不让dealloc被调用的东西。一旦你的dealloc被调用,所有视图都将被删除