2014-01-12 123 views
1

我使用的是IIViewDeckController作为我的根视图控制器。这是一个图书馆,让我有一个滑动菜单视图控制器类似于facebook应用程序中的滑动菜单。它通过使用中心和左视图控制器启动它,然后将整个事物设置为根视图控制器来工作。下面是一个看起来像在AppDelegate.m如何解除模态视图控制器,然后立即让呈现视图控制器呈现不同的模态视图控制器?

FeedViewController* mainFeed = [[FeedViewController alloc] init]; 
UINavigationController* mainStack = [[UINavigationController alloc] initWithRootViewController:mainFeed]; 

MenuViewController* sideMenu = [[MenuViewController alloc] init]; 

IIViewDeckController* viewDeck = [[IIViewDeckController alloc] initWithCenterViewController:mainStack leftViewController:sideMenu]; 

self.window.rootViewController = viewDeck; 

当在中心视图控制器(navStack),我有一个按钮,按下时,提出了一个模式视图控制器,login

- (void)openLogin{ 
    LoginViewController* login = [[LoginViewController alloc] init]; 
    [self presentViewController:login animated:YES completion:nil]; 
} 

login,用户输入凭证并登录后,我尝试让navStack解雇login,然后立即推入不同的控制器creator

- (void)dismissLoginController{ 
    //get a reference to the mainFeed 
    IIViewDeckController* viewDeck = (IIViewDeckController*)self.presentingViewController; 
    UINavigationController* navStack = (UINavigationController*)viewDeck.centerController; 
    FeedViewController* mainFeed = (FeedViewController*)navStack.topViewController; 

    //have it dismiss login, then push creator 
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
    [mainFeed openListingCreator]; 
} 

openListingCreatormainFeed

- (void)openListingCreator{ 
    ListingCreatorViewController* creator = [[ListingCreatorViewController alloc] init]; 
    UINavigationController* creationStack = [[UINavigationController alloc] initWithRootViewController:creator]; 
    [self presentViewController:creationStack animated:YES completion:nil]; 
} 

我得到的错误是:Warning: Attempt to present <UINavigationController: 0xa40c790> on <IIViewDeckController: 0xa843000> whose view is not in the window hierarchy!

我假设这是因为IIViewDeckController不是在屏幕上时,我要求它呈现视图控制器。然而openListingCreator被称为后我忽视login视图控制器,所以我不知道它为什么这样做。我相信这与IIViewDeckController有关,因为我在其他没有它的项目中完成了同样的确切过程,并且没有任何问题。

任何想法?

回答

2

你得到这个错误,因为openListingCreator被调用,而LoginViewController的转换效果仍然有效。您可以将[mainFeed openListingCreator];置于[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];的完成块中,或直接从LoginViewController中提出creationStack

[self.presentingViewController dismissViewControllerAnimated:YES completion:^{ 
    [mainFeed openListingCreator]; 
}]; 
相关问题