我有UISplitViewController
的简单扩展名:
extension UISplitViewController {
var masterViewController: UIViewController? {
return (viewControllers.first as? UINavigationController)?.topViewController
}
}
在某些UIViewController
中,我确实将模态segue连接到我的UISplitViewController
。当正在执行segue时,我就像这样准备我的destinationViewController
:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let searchResultsViewController = (segue.destinationViewController as? UISplitViewController)?.masterViewController as? SearchResultsViewController {
searchResultsViewController.mode = mode
}
}
由于错误,DOESNT WORK :
***由于未捕获的异常终止应用程序' NSGenericException',原因:'内容视图控制器参数必须是其关联的视图控制器层次结构的根。'
但是当我删除UISplitViewController
的扩展程序并准备destinationViewController
时,请执行以下操作:
if let searchResultsViewController = ((segue.destinationViewController as? UISplitViewController)?.viewControllers.first as? UINavigationController)?.topViewController as? SearchResultsViewController {
//prepare controller
}
IT工作
在第一种情况下它不起作用的原因是什么?
答案 0 :(得分:2)
尝试将计算变量的名称从masterViewController
更改为其他名称。您似乎覆盖了UISplitViewController
的内部属性。
这有效,在设置UISplitViewController
时不会调用。
var masterVC: UIViewController? {
return (viewControllers.first as? UINavigationController)?.topViewController
}
这是由SDK中的某些内容调用并导致崩溃。
var masterViewController: UIViewController? {
return (viewControllers.first as? UINavigationController)?.topViewController
}