我的应用已从非基于文档的应用转换为基于文档的应用。我通过创建一个名为NSDocument
的{{1}}的子类来做到这一点。我还创建了一个Document
并将其“文件所有者”设置为Document.xib
。
现在在Document
,我可以看到其“文件所有者”中有一个Document.xib
出口。我在window
中没有定义window
出口。它从何而来?我想这是来自超级Document
,但我无法访问NSDocument
中的那个变量。怎么会有这个奇怪的Document
出口?
答案 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]);
}