我是NSDocument架构的新手,我正在寻找为单个文档设置多个窗口(以及多个NSWindowController对象)。
根据我的理解,NSDocument实际上是为了使用单个窗口而创建的,而且似乎以后会有多个窗口的能力。例如,似乎NSDocument应始终是任何窗口的NIB文件的文件所有者。但是,如果我想将窗口控制器与文档分开呢?
例如,在NSDocument子类中,我目前正在使用代码:
- (void)makeWindowControllers {
[self setMyWindowController1:[[WindowControllerType1 alloc] initWithWindowNibName:@"MyWindow" owner:self]];
[self addWindowController:[self MyWindowController1]];
}
但是NIB文件“MyWindow”的文件所有者设置为NSWindowController子类(WindowControllerType1),而不是我的NSDocument子类。在这种情况下,每当我希望使用[[NSDocumentController sharedDocumentController] currentDocument]
来获取文档时,此ALWAYS都会返回nil。
我认为如果我将NIB文件的所有者设置为NSDocument子类,但是然后我的所有出口链接都断开了,我不知道如何链接到NSWindowController子类(WindowControllerType1),这是典型的行动方案(据我所知)是使NSDocument也成为一个窗口控制器委托,我想避免!
有什么建议吗?
修改
让我澄清并添加一些新信息。我知道Apple在使用WindowController的document属性方面的立场。但是,由于我计划在每个窗口中使用大量嵌套的NSView,我希望避免将文档传递给大型视图链以实现此目的。
问题不一定是这个链条。主要是当[[NSDocumentController sharedDocumentController] currentDocument]
始终为零时,NSDocument的“免费”功能似乎都不起作用,例如撤消/重做。这是我需要解决的主要问题。
答案 0 :(得分:1)
根据我的理解,NSDocument实际上是为了使用单个窗口而创建的,而且似乎以后会有多个窗口的能力。
不,makeWindowControllers在OS X v10.0及更高版本中可用。
但是如果我想将窗口控制器与文档分开呢?
窗口控制器拥有NIB。
有什么建议吗?
待办事项
[self setMyWindowController1:[[WindowControllerType1 alloc] initWithWindowNibName:@"MyWindow"]]
。
NSWindowController有一个由document
设置的属性addWindowController:
。
答案 1 :(得分:0)
使用NSWindowController的document属性而不是currentDocument。