NSDocument中的窗口出口在哪里

时间:2014-10-27 03:44:42

标签: xcode macos cocoa

我的应用已从非基于文档的应用转换为基于文档的应用。我通过创建一个名为NSDocument的{​​{1}}的子类来做到这一点。我还创建了一个Document并将其“文件所有者”设置为Document.xib

现在在Document,我可以看到其“文件所有者”中有一个Document.xib出口。我在window中没有定义window出口。它从何而来?我想这是来自超级Document,但我无法访问NSDocument中的那个变量。怎么会有这个奇怪的Document出口?

1 个答案:

答案 0 :(得分:0)

查看-[NSDocument setWindow:]

的文档
  

如果文件的所有者窗口在笔尖中连接,则在加载此文档为文件所有者的任何笔尖期间会自动调用此方法。您不应该直接调用此方法,通常也不会覆盖它。

NSDocument不会直接处理NSWindow,但它会保留您可以通过NSWindowController方法访问的-[NSDocument windowControllers]列表。我的猜测是,当setWindow:被调用时,它会将窗口包装在一个新的NSWindowController中并将其添加到列表中。

您应该可以使用以下内容访问该窗口:

NSWindowController* controller = self.windowControllers.lastObject;
NSWindow* window = controller.window;

我刚刚制作了一个新项目来测试它,这很有效:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController {
    [super windowControllerDidLoadNib:aController];
    NSLog(@"%@", [self.windowControllers.lastObject window]);
}