我几天来一直在努力解决这个问题而无法让它发挥作用。阅读多篇SO帖子(this,this,this,this,this和this)。问我的朋友谷歌,帮助理解问题,但没有解决它。
在我的iOS应用程序的第一个版本(Swift2和XCode7)中,我使用UITableViewController和UINavigationViewController从不同的UIStoryboard加载新内容。一切正常。对于这个应用程序的第二个版本,我想实现一个UISplitViewController,现在我收到错误:
***由于未捕获的异常终止应用程序' UIViewControllerHierarchyInconsistency',原因:'添加根视图控制器作为视图控制器的子级:
我理解提示,但不能以纵向和横向模式工作的方式解决它。此外,我所采用的解决方案并没有在横向使用UINavigationController。
我创建了一个测试项目来追踪这个错误,希望能解决它。
这是生成错误的代码:
let storyboard = UIStoryboard(name: "ThirdScreen", bundle: nil)
let controller = storyboard.instantiateInitialViewController() as! ThirdDetailViewController
controller.title = "Miracle!"
splitViewController?.showDetailViewController(controller, sender: nil)
此测试项目的完整代码为available from GitHub。
我该如何做到这一点?
非常感谢!
答案 0 :(得分:4)
我找到了一个解决方案,诀窍是删除segue并使用这样的故事板引用:
出于测试和教学目的,我创建了一个完整的测试项目available from GitHub。这演示了在详细视图中使用多个故事板。
11月28日更新:此解决方案有效,但需要iOS 9.完全可以使用另一个UIViewController作为DetailViewController(意味着可以使用该模板),只要你删除segue,实现tableView: didSelectRowAtIndexPath
并使用示例中的代码。在后一种情况下,它也适用于iOS 8。