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

<p>поэтому я делаю приложение с 5 контроллерами представления, первое из которых встроено в uinavigationcontroller, а переход между первыми 4 контроллерами представления работает нормально. однако введение 5-го view controller сломало это, и я получаю ошибку</p><pre><code>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.' </code></pre><p>я не сделал ничего по-другому с этим 5-м контроллером представления, это просто стандартный viewcontroller с представлением изображения и надписью, и все мои сегменты вызываются с помощью кнопок перетаскивания ctrl в раскадровке. у кого-нибудь есть идеи, что вызывает это? </p><p>спасибо</p>

<p><strong> добавить навигационный контроллер в исходный вид </strong> </p><ol> <li>выберите начальный вид </li> <li>перейти к<strong> редактор </strong>-><strong> встроить </strong>-><strong> контроллер навигации. </strong></li> </ol>

<p>в моем случае в то время, когда оригинальный vc выполнял переход, навигационный контроллер переходил и уже изменил видимый vc.</p><p>я решил это, выполнив:</p><pre><code>if (self.navigationcontroller.visibleviewcontroller == self) { [self performseguewithidentifier:@"thankyou" sender:self]; } </code></pre><p>нет больше аварии :)</p>

<p>установите uinavigationcontroller как начальный вид контроллера (начальная сцена) в storyboard.</p>

<p>скорее всего, это потому, что ваш push-переход от кнопки или чего-либо другого указывает на контроллер представления, а не контроллер представления навигации, который наследует ваш контроллер представления. итак, вы должны указать переход к контроллеру навигации.</p><p>надеюсь это поможет.</p>

<p>вам просто нужно встроить navigation controller в ваш source view controller (один начальный вид, а не тот, который вы настаиваете). это можно сделать, выбрав source view controller и перейдите в редактор -> embed in -> navigation controller. </p><p>если вы думаете, что панель навигации, что сделал контроллер навигации. просто выберите контроллер навигации, в «показать инспектор атрибутов» отключите показывает панель навигации. </p>

<p>в моем конкретном случае место для вызова подмножества представлений, требующих push, было только из кода и не могло быть подключено через ib. первоначальный проект по созданию подмножества представлений был начат с выделенной кнопки и, таким образом, был ib'able. </p><p>ни один переход не был настраиваемым, и, таким образом, любой push приводил к этой ошибке.</p><p>мое решение было простым: [self showviewcontroller: targetviewcontroller sender: self];</p>

<p>я столкнулся с той же проблемой через несколько минут, я мог ее решить.</p><p>я удалил соединения segue, и я снова установил соединения из одного представления в другое. поэтому проблема решена .... дело в том, что я удалил представления и внес несколько изменений в представления в сцене раскадровки. и важно то, что вам нужно проверить правильность соединений, соединяющих один вид с другим.</p><p>это может быть полезным для кого-то, я надеюсь .... </p>

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

<p>если вы используете класс uiviewcontroller</p><p>затем отметьте одну вещь в объявлении идентификатора segue например, вы установили</p><p>идентификатор: mysegue1 segue: присутствует модально (выберите этот вариант, если вы используете класс uiviewcontroller)</p><p>презентация: по умолчанию переход: по умолчанию</p><p>и еще раз проверьте правильность замедления объекта</p><p>может быть, мой ответ не совсем правильный, но это все, что я узнаю об этой ошибке ... надеюсь, она немного поможет вам.</p>

<p>я столкнулся с той же проблемой и много искал, но ничто не могло мне помочь. я пытался разными способами. наконец-то я нашел решение .. я делаю проект в xcode 5 и разработал представления с использованием раскадровки .. у меня есть 3 экрана и мои соединения ...</p><p>view1 to view2 -> push</p><p>view2 to view3 -> push</p><p>view2 to view1 -> modal (это моя ошибка, нам нужно использовать только push)</p><p>это хорошо работает, но я поместил элемент панели кнопок (назад) в view2, и соединение segue было модальным. когда я нажимаю на кнопку панели view2, она перенаправляется на view1 правильно, но когда я пытаюсь перейти от view1 к view2, я получаю ту же ошибку ... тот же push-переход от конечного вида к исходному виду.</p><p>я надеюсь, что это будет полезно для кого-то .. спасибо</p>

<p>у меня была такая же проблема, как и у вас.</p><p>моя проблема заключалась в том, что я вызывал идентификатор segue, который был недоступен из класса, из которого я вызывал segue. я решил это, добавив еще один переход непосредственно к представлению из viewcontroller, у которого был доступ к классу, в котором я работал. надеюсь, это поможет.</p>