我是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子类。
我认为,如果我将NIB文件的所有者设置为NSDocument子类,但我的所有出口链接都中断了,并且我不知道如何链接到NSWindowController子类(WindowControllerType1),这是可以纠正的,因为典型的操作过程(据我所知)也是使NSDocument成为窗口控制器委托,这是我想避免的!
有什么建议吗?
编辑:
让我澄清并补充一些新的资料。我知道Apple在使用WindowController的document属性方面的立场。但是,由于我计划在每个窗口中有更多的嵌套NSViews,为了实现这一点,我希望避免通过大的视图链传递文档。
问题不一定是这条链。大多数情况下,当[[NSDocumentController sharedDocumentController] currentDocument]总是为零时,NSDocument的“免费”功能似乎都不起作用,比如撤销/重做。这是我需要解决的主要问题。
发布于 2015-10-19 00:00:50
据我所知,NSDocument实际上是为了使用单个窗口而创建的,而且似乎在后面增加了多个窗口的能力。
不,makeWindowControllers可在OSXv10.0及更高版本中使用。
但是,如果我想将窗口控制器从文档中分离出来呢?
窗口控制器拥有NIB。
有什么建议吗?
做[self setMyWindowController1:[[WindowControllerType1 alloc] initWithWindowNibName:@"MyWindow"]]。
NSWindowController有一个属性document,它由addWindowController:设置。
发布于 2015-10-18 17:26:19
使用NSWindowController的document属性而不是currentDocument。
https://stackoverflow.com/questions/33200326
复制相似问题