我的应用中的家伙我在应用委托方法application:didFinishLaunchingWithOptions:
中有一些代码,用于确定初始视图控制器应该是LoginViewController
还是MainViewController
。
如果首先显示LoginViewController
并且用户成功登录,我会使用以下代码显示MainViewController
模式:
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"];
vc.loginViewController = self;
[self presentViewController:vc animated:YES completion:nil];
在屏幕上显示MainController
之后,接下来我要做的是从内存中移除LoginViewController
所以在viewWillApper:animated:
我的MainViewController
方法中使用此代码删除(或至少尝试)LoginViewController
:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.loginViewController) {
[self.loginViewController dismissViewControllerAnimated:NO completion:nil];
}
}
问题是此代码导致奇怪的行为,例如MainViewController
被从屏幕上移除,并且此错误消息显示在控制台中。
Unbalanced calls to begin/end appearance transitions for <LoginViewController: 0xb06e350>
我也尝试在[self dismissViewControllerAnimated:NO completion:nil]
方法的完成块中调用presentViewController:animated:completion
,但仍然没有运气,但它没有用。
我做错了什么?当LoginViewController
以模态方式呈现时,如何从内存中删除基础MainViewController
?
答案 0 :(得分:1)
如果您希望登录控制器消失,请不要显示您的主视图控制器,只需将其设置为窗口的根视图控制器。
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"];
Self.window.rootViewController = VC;
答案 1 :(得分:0)
在您展示另一个或dismissViewController
之后,您无法presentingViewController
。在这里,您应先取消LoginViewController
,然后再出现MainViewController
。
否则,如果您希望pushViewController
,则可以致电[self.navigationController setViewControllers: animated:]
以删除LoginViewController
。
如果您认为presentingViewController
正是您想要的,请在application:didFinishLaunchingWithOptions:
if (self.loginViewController) { //Define loginViewController in appDelegate.h
[self dismissViewControllerAnimated:NO completion:^{
[self presentViewController:mainViewController animated:YES completion:nil];
}];
}
else{
[self presentViewController:mainViewController animated:YES completion:nil];
}