从 NSViewController 访问 NSDocument,反之亦然

Access NSDocument from NSViewController and vice versa

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

我有以下代码执行前者,但当视图加载或移动到 window:

时它不起作用
var document: Document {
    return NSDocumentController.sharedDocumentController().documentForWindow(view.window!) as! Document
}

从 NS 访问 NSDocumentViewController

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

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

这个属性会在viewDidLoad方法中returnnil,但是return viewDidAppear 方法中的文档。

从 NSDocument

访问 NSViewController

可以通过此 属性 从文档访问视图控制器(ViewControllerNS[=43 的子类=]):

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

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

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