【发布时间】:2011-05-05 21:50:37
【问题描述】:
我是基于文档的应用程序的新手,因此我可能错过了一些基本的东西。我编写了一个基于文档的应用程序,它使用子类 NSWindowController 作为接口,使用子类 NSDocument 作为模型。根据文档,我在 makeWindowControllers 中初始化了 windowController 并加载了它的 xib。在界面生成器中,xib 将我的 windowController 子类设置为文件的所有者。在窗口中的视图中,我有一个 NSOutlineView 的子类,并且 NSOutlineView 数据源和委托也在 nib 中引用,并通过 IBOutlets 连接到 windowController。
根据文档,我应该可以通过 [windowController 文档] 从 OutlineView 数据源访问文档。但是,从 OutlineView 数据源引用 windowController(通过 IBOutlet)给了我文档!
这导致 OutlineView 数据源(它是 windowController 的 xib 中 NSObject 的子类)中的一些相当丑陋的代码来获取文档,例如:
-(MyDocument *)myDocument {
MyDocument *theDocument = (MyDocument *)myWindowController;
return theDocument;
}
头文件中的 IBOutlet 将 myWindowController 引用为:
IBOutlet MyWindowController *myWindowController
简而言之-为什么在这种情况下连接到 windowController 的 IBOutlet 会直接为我获取文档?上面的代码有效,但似乎不应该。
编辑:澄清
【问题讨论】:
-
哪个类作为大纲视图数据源,在哪里创建这个类的实例?
-
无法访问 nib 文件和源代码,我想不出您遇到此问题的原因。如果作为大纲视图数据源的类有一个连接到文件所有者的
IBOutlet,那么它应该是窗口控制器实例。如果你愿意把你的项目上传到某个地方,我可以看看。 -
感谢您的回复! outlineView 数据源是在 windowController 的 xib 中创建的 NSObject,通过 IBOutlet 连接到 File 的 Owner
标签: cocoa nsdocument iboutlet nswindowcontroller