gpt4 book ai didi

objective-c - 在基于文档的 OS X 应用程序中的 NSViewController 上设置 representedObject

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:41 27 4
gpt4 key购买 nike

我正在开发一个简单的 OS X Cocoa 应用程序,用户在其中填写表单,应用程序执行一些计算,这些计算会在其他字段中弹出。

我从 Xcode 6.3.2(适用于 Yosemite)上默认的基于文档的应用程序模板开始。该模板包括 NSDocument 的子类和 NSViewController 的子类。该界面在 Storyboard 中定义。 NSDocument 在 makeWindowControllers 中从 Storyboard 初始化界面。

我在将接口(interface)片段绑定(bind)到 ViewController 的 representedObject 时遇到了麻烦——事实证明我绑定(bind)的是 nil。永远不会调用 ViewController 的 setRepresentedObject 方法。

我尝试让 ViewController 在 vi​​ewDidLoad 中对其自身调用 setRepresentedObject,但此时尚未设置 WindowController 的文档属性(它返回 nil)。

我不清楚是否可以从 NSDocument 中获取 ViewController 的实例 - NSDocument 知道它的窗口/WindowController,但我不确定如何从这些类中找到 ViewController。

我想知道执行此操作的惯用 Xcode/Apple 方法。无论是通过 Storyboard View 还是在我的代码中以编程方式实现。

如果可能的话,我还想避免将代码耦合得太紧。

最佳答案

当我遇到这个问题时,我正在寻找如何自己做这件事。在 ViewController 类的 viewWillAppear 方法中执行此操作(如 wolfteeth 所建议)会使 ViewController 依赖于 Document 对象,这对我来说似乎是倒退的。

最好在 Document 类的 makeWindowControllers 方法中执行此操作,如下所示:

override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let windowController = storyboard.instantiateController(withIdentifier: "Document Window Controller") as! NSWindowController
self.addWindowController(windowController)

// Set represented object of ViewController
if let viewController: ViewController = windowController.contentViewController as! ViewController? {
viewController.representedObject = self.model
}
}

此代码片段假定您的 Document 类中有一个名为“model”的属性,该属性引用您的 ViewController 表示的模型对象。

关于objective-c - 在基于文档的 OS X 应用程序中的 NSViewController 上设置 representedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com