我是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/