objective-c - 在各种 View / Nib 之间共享用于绑定(bind)的对象(特别是 NSDocument)

标签 objective-c cocoa nsdocument nswindowcontroller nsviewcontroller

我正在使用 Xcode 4 编写 OSX (Lion) 应用程序。

到目前为止,这个问题和互联网已经被证明不是特别有帮助。

我定义了一个文档,以及 MainMenu.xib 和一个文档窗口;文档窗口当然是在加载/创建文档时创建的,因此可以访问相关数据。

我想在这个项目中尽可能多地利用 Cocoa Bindings,所以我的问题是:

如果我创建另一个 View (假设一个带有链接 Nib 的 NSViewController);我如何允许它访问文档的数据?

我尝试为文档类添加 #import,但是当我将文档类上的 #import 添加到 View Controller (以创建它)时,这会导致问题 - 我收到未知类型编译错误。

我还沿着传递临时对象的路线(甚至在创建 View Controller 后访问 getters/setters);肯定有更好、更干净的方法吗?

该应用程序只有一个 NSWindowController(默认),仅此而已,它是来自 XCode 非核心数据基于文档的应用程序模板的普通版本。

感谢您的帮助, 克林特

最佳答案

如果你想绑定(bind)到它,你需要在其他类中引用某种文档。因为您已经在使用 NSViewController您可以设置representedObject NSViewController的到您的文档。或者,您可以子类 NSViewController并创建一个自定义属性来引用该文档。

YourViewController* controller = [[YourViewController alloc] initWithNibName:@"YourNib" bundle:nil];
[controller setRepresentedObject:yourDocument];

在 Interface Builder 中,您可以使用键路径 representedObject.<some property of your document> 将 View Controller Nib 中的对象绑定(bind)到文件所有者 .

关于objective-c - 在各种 View / Nib 之间共享用于绑定(bind)的对象(特别是 NSDocument),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070698/

相关文章:

objective-c - 启用 iCloud - 停止在应用程序启动时显示打开的文件?

ios - UITableViewCell 在用户触摸或点击 Cell 时动画调整大小

c - 为什么 NSError 需要双重间接? (指向指针的指针)

ios - CATextLayer foregroundColor 动画不适用于 iOS9,但适用于 iOS10 或更高版本

cocoa - 使用 AudioToolBox 将 Wav 文件保存到 FileWrapper

objective-c - NSString 中 %@ %d 的名称

cocoa - NSPageController 调整大小和快照

iphone - 如何从 NSDocumentDirectory 读取数据

iphone - 自定义地址簿 ABPeoplePickerViewController 帮忙吗?

cocoa - 启动时延迟 Cocoa NSDocument 创建