2014-02-25 47 views
0

我的应用程序中的伙计我在应用程序代理方法application:didFinishLaunchingWithOptions:中有一些代码,用于确定初始视图控制器应该是LoginViewController还是MainViewController在模态显示第二个ViewController后删除ViewController

如果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所以在MainViewControllerviewWillApper:animated:方法我使用此代码以去除(或至少尝试)的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> 

我也试过在presentViewController:animated:completion方法,但仍然没有运气完成块调用[self dismissViewControllerAnimated:NO completion:nil],它没有工作。

我在做什么错?当模式显示MainViewController时,如何从内存中删除底层LoginViewController

回答

1

如果您希望登录控制器消失,请将其设置为窗口的根视图控制器,但不要显示您的主视图控制器。

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"]; 
Self.window.rootViewController = VC; 
+0

这工作,但我宁愿切换到一些过渡动画效果是这样的。有没有办法做到这一点? – BigLex

+0

找到一种方法来在这个链接上设置动画效果:http://stackoverflow.com/questions/7703806/rootviewcontroller-switch-transition-animation – BigLex

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]; 
} 
相关问题