Вчера я отправил question относительно реагирования на получение push-уведомления, в результате чего мне нужно было перейти от одного вида к другому. На этот вопрос был дан ответ, однако теперь я перешел к другому требованию реагировать на push-уведомления, в результате чего мне нужно перейти на третий уровень в стеке навигации.iOS Programally Drill Down Navigation Stack
Ниже представлен макет моей иерархии взглядов, где после получения push-уведомления я хочу перейти к заголовкам вида «Третий вид».
От ответа на мой предыдущий вопрос, я могу перейти к «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» встроен в контроллер навигации.
Спасибо Даджи-Дан. Теперь я могу заставить его работать, задерживая [self performSegueWithIdentifier: @ «Admin» отправитель: self]; в «Second View», однако интересно, есть ли лучший способ сделать это, а не через задержку (зная, когда закончится второй segue)? Вы упомянули didPerformSegue, однако я не могу найти этот метод? – Nick
http://stackoverflow.com/questions/18310396/how-to-execute-some-code-after-a-segue-is-done Извините, что я имел в виду, хотя –
А, ладно, спасибо. У меня есть другой вопрос, если вы не возражаете, чтобы я спросил: если я отвечу на уведомление в следующий раз, я в конечном итоге получаю сообщение в консоли «Неуравновешенные вызовы для перехода на начало/конец перехода для.», и пользовательский интерфейс все испорчен - теперь у меня есть две версии« Второго представления »в стеке, а не« Второй вид », а затем« Третий вид ». Любые идеи? Это происходит, как если бы я перешел обратно в корневой режим или остался в «Третьем просмотре». –
Nick