UISplitViewController扩展程序为应用程序

时间:2016-08-05 09:42:08

标签: ios swift uisplitviewcontroller

我有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工作

  

在第一种情况下它不起作用的原因是什么?

1 个答案:

答案 0 :(得分:2)

尝试将计算变量的名称从masterViewController更改为其他名称。您似乎覆盖了UISplitViewController的内部属性。

这有效,在设置UISplitViewController时不会调用。

var masterVC: UIViewController? {
    return (viewControllers.first as? UINavigationController)?.topViewController
}

这是由SDK中的某些内容调用并导致崩溃。

var masterViewController: UIViewController? {
    return (viewControllers.first as? UINavigationController)?.topViewController
}