Cocoa 关闭文档';s窗口并打开一个新窗口,而不关闭文档

Cocoa 关闭文档';s窗口并打开一个新窗口,而不关闭文档,cocoa,nsdocument,appkit,nswindowcontroller,Cocoa,Nsdocument,Appkit,Nswindowcontroller,我的应用程序是基于文档的,但“文档”包含两个文件夹,而不是一个文件。文档的初始窗口包含两个文件选择器和一个按钮;该操作将关闭该窗口并打开一个新窗口,其中显示两个文件夹层次结构之间的操作结果。(这两个窗口的大小差别很大;将两个视图都保留在一个tables选项卡视图中并切换到该选项卡视图将非常重要。) 下面是“我的操作”方法中关闭“文件选择器”窗口并打开“结果”窗口的代码: [self retain]; NSArray *existingWindowControllers = [[[self win

我的应用程序是基于文档的,但“文档”包含两个文件夹,而不是一个文件。文档的初始窗口包含两个文件选择器和一个按钮;该操作将关闭该窗口并打开一个新窗口,其中显示两个文件夹层次结构之间的操作结果。(这两个窗口的大小差别很大;将两个视图都保留在一个tables选项卡视图中并切换到该选项卡视图将非常重要。)

下面是“我的操作”方法中关闭“文件选择器”窗口并打开“结果”窗口的代码:

[self retain];
NSArray *existingWindowControllers = [[[self windowControllers] copy] autorelease];
for (NSWindowController *windowController in existingWindowControllers) {
    [windowController setShouldCloseDocument:NO];
    [windowController close];
    [self removeWindowController:windowController];
}
[self addWindowController:[[[NSWindowController alloc] initWithWindowNibName:@"ProjectFoldersDocument" owner:self] autorelease]];
[self showWindows];
[self release];
(我添加了retain和release消息,但未能解决此问题。)

我的问题是,尽管我告诉初始窗口控制器不要关闭文档,但在该操作方法完成后,文档会被释放和释放。(这是解决问题的又一次失败尝试。)


那么,对于同一文档,如何用另一个窗口替换第一个窗口,而不使文档熄灭?

我最终通过切换
removeWindowController:
close
消息解决了这个问题:

[self removeWindowController:windowController];
[windowController close];
这表明窗口控制器正在关闭其文档。我不知道为什么,因为我在前一行告诉过它不要这样做

我还删除了显式的
retain
release
消息。问题没有再出现