52

所以我正在制作一个带有 5 个视图控制器的应用程序,第一个嵌入在 UINavigationController 中,前 4 个视图控制器之间的 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,我所有的 segue 都是由故事板中的 ctrl 拖动按钮调用的。有人知道是什么原因造成的吗?

谢谢

4

11 回答 11

154

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

  1. 选择初始视图
  2. 转到编辑器-->嵌入-->导航控制器。
于 2013-04-11T08:57:47.857 回答
14

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

于 2012-12-25T11:40:11.200 回答
14

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

我通过这样做解决了它:

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

没有更多的崩溃。:)

于 2014-04-20T18:31:06.360 回答
4

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

希望这可以帮助。

于 2013-01-23T21:32:51.313 回答
1

您只需将导航控制器嵌入到您的源视图控制器中(一个初始视图,而不是您正在推动的视图)。这可以通过选择 Source View Controller 和 Go To Editor--> Embed In --> Navigation Controller 来完成。

如果你认为Navigation Controller已经做了Navigation Bar。只需选择 Navigation Controller ,在“Show the Attributes Inspector”中禁用 Shows Navigation Bar。

于 2013-03-26T00:08:50.710 回答
1

在我的特定情况下,调用需要推送的视图子集的位置仅来自代码,并且无法通过 IB 连接。创建视图子集的原始项目是使用专用按钮启动的,因此是 IB'able。

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

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

于 2015-03-06T15:36:04.223 回答
0

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

于 2013-07-22T14:38:25.487 回答
0

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

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

这可能对我希望的人有所帮助....

于 2014-03-27T08:51:29.820 回答
0

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

view1 到 view2--> 推送

view2 到 view3--> 推送

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

这很好,但我在 view2 中放置了 bar button item(Back) 并且 segue 连接是 modal 。当我单击 view2 栏按钮时,它会正确重定向到 view1,但是当我尝试从 view1 转到 view2 时,我得到了同样的错误。因为如果您将推送 segue 类型从源视图提供给目标视图,您需要使用相同的推送 segue 从目标视图到源视图。

我希望它对某人有帮助..谢谢

于 2014-03-28T10:19:56.717 回答
0

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

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

于 2014-06-20T22:35:59.397 回答
0

如果您使用的是 UIViewController 类

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

Identifier:MySegue1 Segue:Present Modally(如果您使用 UIViewController 类,请选择此选项)

演示文稿:默认转换:默认

并检查您的对象减速是否正确的另一件事

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

于 2016-01-19T09:40:16.617 回答