我是基于文档的应用程序的新手,因此我可能错过了一些基本的东西。我编写了一个基于文档的应用程序,它使用子类化的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会在这种情况下直接获取文档?上面的代码有效,但似乎不应该。
编辑:澄清
答案 0 :(得分:0)
好的,我找到了这个问题的答案 - 不要不小心将xib的文件所有者设置为NSDocument而不是代码的另一部分中的windowController而忘记你做到了!这将覆盖您之前在xib中设置的文件所有者。