2012-11-24 94 views
51
的实例管理使用推送塞格斯

所以我正在用5个视图控制器应用程序,该第一被嵌入在一个UINavigationController和之间的SEGUE前4个视图控制器工作正常。但是引入第五视图控制器已经打破了这一点,我得到了错误NSGenericException“原因:”只能当源控制器由UINavigationController的

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与图像视图和标签,所有做过什么不同我的segues通过ctrl拖动故事板中的按钮来调用。有谁知道这是什么原因?

谢谢

回答

151

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

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

想知道为什么这未被选为正确答案? – dhaval

+9

可能是因为OP很清楚地表示他已经将所有视图控制器嵌入到UINavigationController中。我在我的项目中遇到了完全相同的问题。视图控制器绝对是嵌入在UINavigationController中的,正如导航栏中的 NathanAldenSr

+1

太棒了。简单的回答,为我节省了很多时间,并解决了一个障碍。 +1 – voghDev

13

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

4

这是因为从纽扣无论你推SEGUE指向一个视图控制器不是导航视图控制器视图控制器继承是最有可能的。所以,你必须将导航控制器指向segue。

希望这会有所帮助。

1

你只需要嵌入导航控制器到你的源代码视图控制器(在一个初始视图,而不是你所推的观点)。这可以通过选择源视图控制器和转到编辑器 - >嵌入 - >导航控制器来完成。

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

0

如果您的应用程序具有导航控制器的根视图窗口的控制,选择故事板文件,然后选择相应的导航控制器,在模拟指标选择在初始视图控制器复选框。这对我有效。希望这可以帮助。

0

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

我已删除赛格瑞连接,我已经从一个视图到其他views.That的IT问题解决再次进行连接。 事情是我已经删除了意见,并且我已经在故事板场景中对视图进行了少许更改。 重要的是你需要检查从一个视图到另一个视图的连接是否正常工作。

这可能有助于一些一个希望....

0

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

厂景到视图2 - >推

视图2到VIEW3 - >推

视图2到VIEW1 - >模式(这是我的错误,我们需要用推只)

这运行良好,但我已经在view2中放置了bar按钮项(后退),并且segue连接是模态的。当我点击view2 bar按钮时,它被正确地重定向到view1,但是当我尝试从view1前进到view2时,我得到了同样的错误。 因为如果你给从源视图到你需要使用从目标视图到源视图相同的推赛格瑞目标视图推赛格瑞类型..

我希望这将有助于someone..thanks

13

在我在最初的VC执行了这个循环的情况下,导航控制器正在转换并且已经改变了他可见的VC。

我解决了它这样做:

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

没有更多的崩溃。 :)

+1

它工作..通过nsnotifications触发segue更有用。 –

+0

很好的答案。通过通知触发时也帮助我 –

0

我有和你一样的问题。

我的问题是,我正在调用一个segue的标识符,这个标识符在我正在调用segue的类内不能访问。我通过直接向ViewController的视图添加另一个segue来解决这个问题,该视图可以访问我正在工作的类。希望这有助于。

0

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

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

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

0

如果你使用UIViewController类

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

标识符:MySegue1 Segue公司:现模态(选这个,如果你正在使用UIViewController类)

介绍:默认 过渡:

和默认检查一件事,你的OB主题减速是正确的

也许我的答案是不完全正确的,但这是我所知道的所有抵消此错误。希望它能帮助你点点滴滴。

相关问题