对子类NSWindowController的引用返回其文档 - 这是正确的吗?

时间:2011-05-05 21:50:37

标签: cocoa nsdocument iboutlet nswindowcontroller

我是基于文档的应用程序的新手,因此我可能错过了一些基本的东西。我编写了一个基于文档的应用程序,它使用子类化的NSWindowController作为接口,并使用子类化的NSDocument作为模型。根据文档,我在makeWindowControllers中初始化windowController并加载其xib。在界面构建器中,xib将我的windowController子类设置为File的所有者。在窗口中的视图中,我有一个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会在这种情况下直接获取文档?上面的代码有效,但似乎不应该。

编辑:澄清

1 个答案:

答案 0 :(得分:0)

好的,我找到了这个问题的答案 - 不要不小心将xib的文件所有者设置为NSDocument而不是代码的另一部分中的windowController而忘记你做到了!这将覆盖您之前在xib中设置的文件所有者。