NSGenericException',原因:'推送segues只能在源控制器由UINavigationController实例管理时使用

时间:2012-11-24 22:09:04

标签: iphone ios uinavigationcontroller segue

所以我正在制作一个带有5个视图控制器的应用程序,第一个嵌入在UINavigationController中,前4个视图控制器之间的segue工作正常。然而,引入第五个视图控制器已经打破了这个,我收到了错误

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

我没有用这个第五个视图控制器做任何不同的事情,它只是一个带有图像视图和标签的标准ViewController,我的所有segue都是通过故事板中的ctrl拖动按钮来调用的。有没有人知道这是什么造成的?

由于

11 个答案:

答案 0 :(得分:153)

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

  1. 选择初始视图
  2. 转到编辑 - > 嵌入 - > 导航控制器。

答案 1 :(得分:14)

在我的情况下,当原始VC执行segue时,导航控制器正在转换并且已经改变了他可见的VC。

我解决了这个问题:

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

不再崩溃。 :)

答案 2 :(得分:13)

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

答案 3 :(得分:4)

这很可能是因为您从按钮或指向视图控制器的任何内容推送而不是视图控制器继承的导航视图控制器。因此,您必须将segue指向导航控制器。

希望这有帮助。

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

如果您的应用程序将导航控制器作为窗口的根视图控制器,请选择storyboard文件,然后选择相应的导航控制器,在Simulated Metrics中选择Is Initial View Controller复选框。这对我有用。希望这会有所帮助。

答案 6 :(得分:0)

几分钟后我就遇到了同样的问题,我可以解决它。

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

这可能对某些人有所帮助,我希望......

答案 7 :(得分:0)

我遇到了同样的问题,我搜索了很多,但没有什么可以帮助我。我试过很多方面。最后我找到了解决方案。 我在xcode 5中做了一个项目,并使用故事板开发了视图。 我有3个屏幕,我的连接是..

view1 to view2 - > push

view2 to view3 - > push

view2 to view1 - > modal(这是我的错误,我们只需要使用push)

这很好用,但我在view2中放置了条形按钮项(Back),并且segue连接是模态的。当我点击view2 bar按钮时,它会被正确地重定向到view1但是当我尝试从view1继续到view2时,我得到了同样的错误。 因为如果您将push segue类型从源视图提供到目标视图,则需要使用从目标视图到源视图的相同推送segue ..

我希望它会对某人有所帮助。谢谢

答案 8 :(得分:0)

我遇到了和你一样的问题。

我的问题是我正在调用一个segue的标识符,这个标识符不能从我调用segue的类中访问。我通过从ViewController中直接添加另一个segue来解决它,它可以访问我正在使用的类。希望这会有所帮助。

答案 9 :(得分:0)

在我的特定情况下,调用需要推送的视图子集的地方仅来自代码并且不能通过IB连接。用于创建视图子集的原始项目是使用专用按钮启动的,因此具有IB能力。

没有segue是可配置的,因此任何推送都会导致此错误。

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

答案 10 :(得分:0)

如果您使用的是UIViewController类

然后检查segue标识符声明中的一件事 例如,您已设置

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

演示文稿:默认 过渡:默认

再检查一下你的物体减速是否正确

也许我的回答并不完全正确,但这就是我所知道的这个错误。 希望它能帮助你减肥。