0

我的应用程序是基于文档的,但“文档”包含两个文件夹,而不是一个文件。文档的初始窗口包含几个文件选择器和一个按钮;该操作将关闭该窗口并打开一个新窗口,显示两个文件夹层次结构之间的操作结果。(这两个窗口的大小显着不同;将两个视图都保存在 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];

(我在尝试解决问题时添加了保留和释放消息。)

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

那么,对于同一个文档,我怎样才能用另一个窗口替换第一个窗口,而不会使文档消失呢?

4

1 回答 1

1

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

[self removeWindowController:windowController];
[windowController close];

这表明窗口控制器正在关闭其文档。我不知道为什么,因为我已经告诉它不要在上一行。

我还删除了显式retainrelease消息。问题没有回来。

于 2009-12-18T12:38:32.053 回答