it-swarm.com.ru

NSGenericException ", причина:" Push-сегменты могут использоваться только тогда, когда исходный контроллер управляется экземпляром UINavigationController

поэтому я делаю приложение с 5 контроллерами представления, первое из которых встроено в UINavigationController, а переход между первыми 4 контроллерами представления работает нормально. Однако введение 5-го View Controller сломало это, и я получаю ошибку

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

Я не сделал ничего по-другому с этим 5-м контроллером представления, это просто стандартный ViewController с представлением изображения и надписью, и все мои сегменты вызываются с помощью кнопок перетаскивания Ctrl в раскадровке. У кого-нибудь есть идеи, что вызывает это? 

Спасибо

51
DouglasBoone

добавить навигационный контроллер в исходный вид  

  1. Выберите начальный вид 
  2. Перейти к Редактор -> Встроить -> Контроллер навигации.
153
Kirit Vaghela

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

Я решил это, выполнив:

if (self.navigationController.visibleViewController == self) {
    [self performSegueWithIdentifier:@"thankyou" sender:self];
}

нет больше аварии :)

14
Gaston

Установите UINavigationcontroller как начальный вид контроллера (начальная сцена) в StoryBoard.

13
Vinay

Скорее всего, это потому, что ваш Push-переход от кнопки или чего-либо другого указывает на контроллер представления, а не контроллер представления навигации, который наследует ваш контроллер представления. Итак, вы должны указать переход к контроллеру навигации.

Надеюсь это поможет.

4
Yosep Kim

Вам просто нужно встроить Navigation Controller в ваш Source View Controller (один начальный вид, а не тот, который вы настаиваете). Это можно сделать, выбрав Source View Controller и перейдите в редактор -> Embed In -> Navigation Controller. 

Если вы думаете, что панель навигации, что сделал контроллер навигации. Просто выберите контроллер навигации, в «Показать инспектор атрибутов» отключите показывает панель навигации. 

1
Nicholas Chew

в моем конкретном случае место для вызова подмножества представлений, требующих Push, было только из кода и не могло быть подключено через IB. Первоначальный проект по созданию подмножества представлений был начат с выделенной кнопки и, таким образом, был IB'able. 

Ни один переход не был настраиваемым, и, таким образом, любой Push приводил к этой ошибке.

Мое решение было простым: [self showViewController: targetViewController sender: self];

0
drew..

Я столкнулся с той же проблемой через несколько минут, я мог ее решить.

Я удалил соединения segue, и я снова установил соединения из одного представления в другое. Поэтому проблема решена .... Дело в том, что я удалил представления и внес несколько изменений в представления в сцене раскадровки. И важно то, что вам нужно проверить правильность соединений, соединяющих один вид с другим.

Это может быть полезным для кого-то, я надеюсь .... 

0
Narasimha Nallamsetty

Если ваше приложение имеет контроллер навигации в качестве корневого контроллера представления окна, выберите файл раскадровки, а затем выберите соответствующий контроллер навигации, в поле Имитированные метрики установите флажок «Исходный контроллер просмотра». Это сработало для меня. Надеюсь это поможет.

0
Singh

если вы используете класс UIViewController

затем отметьте одну вещь в объявлении идентификатора segue Например, вы установили

Идентификатор: MySegue1 Segue: присутствует модально (выберите этот вариант, если вы используете класс UIViewController)

Презентация: по умолчанию Переход: по умолчанию

и еще раз проверьте правильность замедления объекта

Может быть, мой ответ не совсем правильный, но это все, что я узнаю об этой ошибке ... надеюсь, она немного поможет вам.

0
Shashwat

Я столкнулся с той же проблемой и много искал, но ничто не могло мне помочь. Я пытался разными способами. Наконец-то я нашел решение .. Я делаю проект в xcode 5 и разработал представления с использованием раскадровки .. У меня есть 3 экрана и мои соединения ...

view1 to view2 -> Push

view2 to view3 -> Push

view2 to view1 -> modal (это моя ошибка, нам нужно использовать только Push)

это хорошо работает, но я поместил элемент панели кнопок (Назад) в view2, и соединение segue было модальным. когда я нажимаю на кнопку панели view2, она перенаправляется на view1 правильно, но когда я пытаюсь перейти от view1 к view2, я получаю ту же ошибку ... тот же Push-переход от конечного вида к исходному виду.

Я надеюсь, что это будет полезно для кого-то .. спасибо

0
Narasimha Nallamsetty

У меня была такая же проблема, как и у вас.

Моя проблема заключалась в том, что я вызывал идентификатор segue, который был недоступен из класса, из которого я вызывал segue. Я решил это, добавив еще один переход непосредственно к представлению из ViewController, у которого был доступ к классу, в котором я работал. Надеюсь, это поможет.

0
bdv