NSOpenPanel / NSSavePanel/NSPanelは初めてです。NSOpenPanelを使用して、アプリが反復処理するファイルのディレクトリを選択し、かなり時間のかかる処理を実行しています。
パネルで-closeを呼び出すことはできますが、メインウィンドウにフォーカスが戻りません。パネルを「閉じる」ことについてはたくさん読んだことがありますが、パネルやウィンドウを「閉じる」のではなく「閉じる」方法は見つかりませんでした。
バックグラウンドスレッド(NSOperation)を生成する必要があるだけですか?
これは私の-chooseDidEnd:returnCode:contextInfo:
-(void) chooseDidEnd:(NSOpenPanel *)panel returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
[panel orderOut:self];
[panel release];
if (returnCode == NSFileHandlingPanelOKButton)
{
[progressIndicator startAnimation:self];
[self doLotsOfTimeConsumingWork:[[panel URL] path]];
[progressIndicator stopAnimation:self];
}
}
NSOpenPanelは消えますが、NSProgressIndicatorはアニメーション化されず、メインウィンドウは-doLotsOfTimeConsumingWork:が完了するまで表示されません。
更新 NSOperationSampleコードを確認したところ、そのように見えます。