从NSViewController访问NSDocument,反之亦然

时间:2016-03-07 11:32:58

标签: cocoa model-view-controller nsdocument nsviewcontroller

从关联的NSViewController子类访问NSDocument子类的正确方法是什么,反之亦然?

我有以下代码执行前者,但是当视图加载或移动到窗口时它不起作用:

var document: Document {
    return NSDocumentController.sharedDocumentController().documentForWindow(view.window!) as! Document
}

1 个答案:

答案 0 :(得分:9)

从NSViewController访问NSDocument

可以通过此属性从视图控制器访问该文档(文档 NSDocument 的子类):

var document: Document? {
    return view.window?.windowController?.document as? Document
}

此属性将在 viewDidLoad 方法中返回 nil ,但会在 viewDidAppear 方法中返回文档。

从NSDocument访问NSViewController

可以通过此属性从文档访问视图控制器( ViewController NSViewController 的子类):

var viewControllers: [ViewController] {
    var result: [ViewController] = []
    for windowController in windowControllers {
        if let viewController = windowController.contentViewController as? ViewController {
            result.append(viewController)
        }
    }
    return result
}

如果您只在 makeWindowControllers 方法中创建一个窗口控制器:

var viewController: ViewController? {
    return windowControllers[0].contentViewController as? ViewController
}