2014-02-25 51 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]; 
} 
相關問題