0

私のアプリはドキュメントベースですが、「ドキュメント」は1つのファイルではなく、2つのフォルダーで構成されています。ドキュメントの初期ウィンドウには、いくつかのファイルピッカーとボタンが含まれています。アクションはそのウィンドウを閉じ、新しいウィンドウを開いて、2つのフォルダー階層間の操作の結果を表示します。(2つのウィンドウのサイズは大幅に異なります。両方のビューをテーブルのタブビューに保持し、それを切り替えるのは簡単ではありません。)

ファイルピッカーウィンドウを閉じて結果ウィンドウを開くアクションメソッドのコードは次のとおりです。

[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];

これは、ウィンドウコントローラが閉じたときにドキュメントを閉じていたことを示しています。直前の行に行かないように言ったので、理由はわかりません。

retain明示的なreleaseメッセージも削除しました。問題は再発しませんでした。

于 2009-12-18T12:38:32.053 に答える