0

Вчера я отправил question относительно реагирования на получение push-уведомления, в результате чего мне нужно было перейти от одного вида к другому. На этот вопрос был дан ответ, однако теперь я перешел к другому требованию реагировать на push-уведомления, в результате чего мне нужно перейти на третий уровень в стеке навигации.iOS Programally Drill Down Navigation Stack

Ниже представлен макет моей иерархии взглядов, где после получения push-уведомления я хочу перейти к заголовкам вида «Третий вид».

Screenshot of view hierarchy

От ответа на мой предыдущий вопрос, я могу перейти к «Second View», тем не менее, когда я пытаюсь выполнить SEGUE нажать «Третий View» в стек, я получаю тот же тип ошибки, что и в моем предыдущем вопросе:

Завершение приложения из-за неперехваченного исключения «NSGenericException», причина: «Не удалось найти контроллер навигации для segue« Admin ». Push segues может использоваться только тогда, когда управляющий источник управляется экземпляром UINavigationController. '

В моей AppDelegate, когда я получаю уведомление, я выбрать нужную вкладку затем:

UINavigationController *navController = (UINavigationController*)[_tabBarController selectedViewController]; 
NHProfileViewController *profileViewController = navController.viewControllers[0]; 
[profileViewController displayAdminWebViewForPushNotification]; 

Тогда в profileViewController (First View) displayAdminWebViewForPushNotification:

_displayAdminForPushNotification = YES; 
[self performSegueWithIdentifier:@"Settings" sender:self]; 

где "Настройки" «Второй вид» на изображении выше.

Тогда в prepareForSegue:

if ([segue.identifier isEqualToString:@"Settings"]) 
{ 
    NHSettingsTableViewController *settingsViewController = segue.destinationViewController; 

    if (_displayAdminForPushNotification) 
    { 
     [settingsViewController displayAdmin]; 
     _displayAdminForPushNotification = NO; 
    } 
} 

До этого момента все в порядке, однако, как только я попал [settingsViewController displayAdmin]:

- (void)displayAdmin 
{ 
    [self performSegueWithIdentifier:@"Admin" sender:self]; 
} 

он выходит из строя. Я сделал некоторую отладку, и на данный момент settingsViewController не имеет контроллера навигации (отсюда сообщение об ошибке/ошибке). Это я не понимаю, поскольку «First View» встроен в контроллер навигации.

ответ

1

Выполнение третьего этапа для начала - второй сеанс даже не выполняется, поэтому он не имеет навигационного контроллера.

задержки его с помощью этого метода, чтобы выполнить действие после того, как Segue:
How to execute some code after a segue is done?

или использовать viewWillAppear!

+0

Спасибо Даджи-Дан. Теперь я могу заставить его работать, задерживая [self performSegueWithIdentifier: @ «Admin» отправитель: self]; в «Second View», однако интересно, есть ли лучший способ сделать это, а не через задержку (зная, когда закончится второй segue)? Вы упомянули didPerformSegue, однако я не могу найти этот метод? – Nick

+0

http://stackoverflow.com/questions/18310396/how-to-execute-some-code-after-a-segue-is-done Извините, что я имел в виду, хотя –

+0

А, ладно, спасибо. У меня есть другой вопрос, если вы не возражаете, чтобы я спросил: если я отвечу на уведомление в следующий раз, я в конечном итоге получаю сообщение в консоли «Неуравновешенные вызовы для перехода на начало/конец перехода для .», и пользовательский интерфейс все испорчен - теперь у меня есть две версии« Второго представления »в стеке, а не« Второй вид », а затем« Третий вид ». Любые идеи? Это происходит, как если бы я перешел обратно в корневой режим или остался в «Третьем просмотре». – Nick