我是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]获取文档时,此总是返回nil。

我认为如果将NIB文件的所有者设置为NSDocument子类可以解决,但是我的所有出口链接都断开了,并且我不确定如何链接到NSWindowController子类(WindowControllerType1),这是典型的操作(据我所知)也是使NSDocument成为窗口控制器委托,这是我想避免的!

有什么建议么?

编辑:

让我澄清一下并添加一些新信息。我知道Apple在使用WindowController的document属性上的立场。但是,由于我计划在每个窗口中使用大量嵌套的NSView,因此我想避免将文档通过大量视图链来实现。

问题不一定是这个链条。大多数情况是,当[[NSDocumentController sharedDocumentController] currentDocument]始终为nil时,NSDocument的“免费”功能似乎都不起作用,例如撤消/重做。这是我需要解决的主要问题。

最佳答案

据我了解,NSDocument确实是为在单个窗口中工作而创建的,而似乎拥有多个窗口的能力后来被淘汰了。


不,makeWindowControllers在OS X v10.0和更高版本中可用。


  但是,如果我想将窗口控制器与文档分开,该怎么办?


窗口控制器拥有NIB。


  有什么建议么?



[self setMyWindowController1:[[WindowControllerType1 alloc] initWithWindowNibName:@"MyWindow"]]

NSWindowController具有由document设置的属性addWindowController:

关于cocoa - 设置多个NSWindowController对象和NSDocument,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33200326/

10-10 03:15