【问题标题】:Push segues can only be used when the source controller is managed by an instance of UINavigationController只有当源控制器由 UINavigationController 的实例管理时,才能使用 Push segues
【发布时间】:2015-11-10 00:51:55
【问题描述】:
在 iOS 7.x(仅限)上,当我调用 [self performSegueWithIdentifier:@"MySegue"],而 self 是 UINavigationController,我得到以下 NSGenericException:
找不到 segue 'MySegue' 的导航控制器。推
仅当源控制器由
UINavigationController 的实例。
奇怪的是,在 iOS 8.x 上它可以完美运行!
我看到的有关此异常的每个solution 都告诉您将源视图控制器嵌入到 UINavigationController 中,但在我的情况下,self 本身已经是 UINavigationController。
performSegueWithIdentifier: 在 UINavigationController 上调用时可以正常工作,并且在 iOS 8 上可以正常工作,那么 iOS 7 上的问题是什么??
【问题讨论】:
标签:
ios
objective-c
ios7
ios8
uinavigationcontroller
【解决方案1】:
第一反应 - 你是如何设法从UINavigationController 创建一个转场的???在Storyboard 中,您可以从UINavigationController 创建关系,而不是segue!
好吧,我很惊讶它是否可以在 iOS 8 上运行。但从概念上讲,您不能要求 UINavigationController 到 performSegueWithIdentifier,因为 push 的 segue 只是要求 sourceViewController 推送 segue 的destinationViewController 的图形方式。
在这种情况下,您如何尝试告诉UINavigationController 执行转场?它没有navigationController,它本身就是!!!
所以我猜如果它在 iOS 7 上工作它是一个错误。
你应该做什么:
要么在作为segue源的控制器上执行选择器-performSegueWithIdentifier。
或
让 UINavigationController 推送你的destinationViewController。