2014-01-12 4 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, после того, как пользователь вводит свои учетные данные и регистрируется, я пытаюсь уволить navStacklogin, а затем немедленно нажать другой контроллер 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]; 
} 

openListingCreator в mainFeed:

- (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]; или представить creationStack непосредственно с LoginViewController.

[self.presentingViewController dismissViewControllerAnimated:YES completion:^{ 
    [mainFeed openListingCreator]; 
}]; 
Смежные вопросы

 Смежные вопросы