NSGenericException ', причина: "Push segues может использоваться только тогда, когда управляющий источник управляется экземпляром UINavigationController

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

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 с представлением изображения и меткой, и все мои segues вызываются кнопками перетаскивания ctrl в раскадровке. Кто-нибудь знает, что вызывает это?

Спасибо

Ответ 1

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

  • Выберите начальный вид
  • Перейти к Редактор Вставить в Контроллер навигации.

Ответ 2

Установите UINavigationcontroller в качестве контроллера начального просмотра (начальная сцена) в StoryBoard.

Ответ 3

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

Я решил это, сделав:

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

больше нет сбоев.:)

Ответ 4

Это, скорее всего, потому, что ваш push-сегмент от кнопки или что-то еще указывает на контроллер вида, а не на контроллер навигации, который наследует ваш контроллер представления. Итак, вы должны указать segue на контроллер навигации.

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

Ответ 5

Вам просто нужно встроить контроллер навигации в свой Source View Controller (одно начальное представление, а не представление, которое вы нажимаете). Это можно сделать, выбрав Control View Source и Go To Editor → Embed In → Navigation Controller.

Если вы считаете, что панель навигации, которую выполняет контроллер навигации. Просто выберите контроллер навигации. В "Показать инспектору атрибутов" отключите панель навигации "Показания".

Ответ 6

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

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

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

Ответ 7

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

view1 to view2 → push

view2 to3 → push

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

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

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

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

Ответ 11

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

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

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

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

и проверьте еще одну вещь, что ваше торможение объекта верное

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