NSGenericException“,原因是:只有在源控制器由UINavigationController实例pipe理时,才能使用Push segues

所以我使用5个视图控制器的应用程序,第一个embedded在一个UINavigationController和前四个视图控制器之间的inheritance工作正常。 然而,介绍第五视图控制器打破了这一点,我得到的错误

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.' 

我没有做任何不同的事情,这个第五视图控制器,它只是一个标准的视图控制器与图像视图和一个标签,所有我的segues调用ctrl拖动故事板中的button。 有没有人知道这是什么原因?

谢谢

将导航控制器添加到您的初始视图

  1. select初始视图
  2. 转到编辑器 – > embedded – > 导航控制器。

在StoryBoard中将UINavigationcontroller设置为初始视图控制器(初始场景)。

就我当时的情况来说,原来的VC执行了这个循环,导航控制器正在转换,并且已经改变了他可见的VC。

我通过这样做来解决它:

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

没有更多的崩溃。 🙂

这很可能是因为您的button从button中延伸,或者是指向视图控制器的任何内容,而不是您的视图控制器inheritance的导航视图控制器。 所以,你必须指向导航控制器。

希望这可以帮助。

您只需将导航控制器embedded您的源视图控制器(一个初始视图,而不是您要推送的视图)。 这可以通过select源视图控制器和转到编辑器 – >embedded – >导航控制器来完成。

如果您认为导航控制器已经完成的导航栏。 只需select导航控制器,在“显示属性检查器”中禁用显示导航栏。

几分钟后,我可以解决它,我面临同样的问题。

我已经删除了segue连接,并且我已经从一个视图再次连接到其他视图。这就是问题解决了。 事情是我已经删除了意见,并且我已经在故事板场景中对意见做了一些改变。 重要的是你需要检查从一个视图到另一个视图正常工作的连接。

这可能对我希望的某个人有所帮助。

我面临同样的问题,我搜查了很多,但没有什么可以帮助我。 我尝试了很多方法。最后我find了解决办法。 我正在做一个项目在Xcode 5和开发视图使用故事板。 我有3个屏幕,我的连接是..

view1到view2 – > push

view2到view3 – > push

view2到view1 – >模态(这是我的错误,我们只需要使用推送)

这是很好的工作,但我已经把barbutton项目(后面)在view2和segue连接是模式。 当我点击view2栏button它被redirect到view1正确,但是当我尝试从view1到view2我得到了同样的错误。 因为如果您从源视图推送seguetypes到目的地视图,您需要使用从目标视图到源视图相同的push segue ..

我希望这会有帮助的人..谢谢

如果您的应用程序具有导航控制器作为窗口的根视图控制器,请select故事板文件,然后select相应的导航控制器,在模拟度量标准中select是初始视图控制器checkbox。 这对我有效。 希望这可以帮助。

我有和你一样的问题。

我的问题是,我正在调用一个segue的标识符,这个标识符在我正在调用segue的类中是无法访问的。 我解决了这个问题,通过直接添加另一个segue到ViewController的视图来访问我正在工作的类。希望这有助于。

在我的具体情况下,调用需要推送的视图子集的地方只能来自代码,并且不能通过IB连接。 创build视图子集的原始项目是由一个专用button开始的,因此是IB'able。

没有segue是可configuration的,因此任何推动导致这个错误。

我的解决scheme很简单:[self showViewController:targetViewController sender:self];

如果你正在使用UIViewController类

然后在segue标识符的声明中检查一个例子,你已经设置了

标识符:MySegue1 Segue:呈现模式(如果您使用的是UIViewController类,请select此选项)

演示:默认转换:默认

再检查一下你的对象减速是否正确

也许我的回答是不完全正确的,但这是我所了解的这个错误。 希望它能帮助你。