私は単純な Cocoa アプリケーションを作成しています。コア データや複数ドキュメントのサポートはありません。Mac Pro、OS X 10.6.6、Xcode 3.2.3 で実行。
AppDelegate クラスでアプリケーションを次のコードに減らしました。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel runModal];
return;
}
デバッガー内から、アプリケーションを実行します。予想通り、あまり役に立たない OpenPanel が表示されます。キャンセルをクリックすると消えます。これはすべて予想どおりです。[Command + Q] をクリックしてアプリケーションを終了すると、UI は消えますが、デバッガーはアプリケーションがまだ実行中であることを示します (コンソール出力と同様)。
私が読んでいるすべての情報に基づいて、これを正しく実行するために他に何もする必要はありません。Open Panel の使用法に関するいくつかの例をダウンロードしましたが、ほとんどの場合、パラメーターとして追加情報を提供する非推奨のモーダルを開く方法を使用しています。FWIW、私はこれらの方法を試しましたが、まだ同じ結果が表示されています。
最後にもう 1 つ、[開く] ダイアログが表示されたときに、アプリケーションに着信接続を受信させたいかどうかを尋ねるメッセージ ボックスが一瞬だけ表示されます。ダイアログはすぐに消えます。それが私の問題の一部であるかどうかはわかりません。[更新 - これは、ファイアウォールがオンになっている場合に対処します。]
はい、私は Objective C ではかなり新しいですが、一般的なプログラミングではありません。知恵の言葉は大歓迎です!
2011.02.07 - 更新:
問題なくデバッガーを 1 行ずつ実行しました。コンソール ウィンドウにプログラム エラーの兆候はありません。
[Command + Q] を押した後も、デバッガーはアクティブのままであると言えます。これは、[プロセスの停止] ツールバー ボタンが [ブレーク] ボタンと同様に有効になっているためです。さらに、コンソールは、(メニューまたはキー コマンドを使用して) アプリケーションを終了するように指示した後も、まだ実行中であることを示しています。以下は、実行の開始からアプリケーションを終了した後までの完全なコンソール出力です。
Program loaded.
run
[Switching to process 62370]
Running...
アクティビティ モニター (システム ツール) は、アプリケーションが終了していることを示します (プロセスとして表示されなくなります) が、デバッガーはまだ「編集」モードに移行しません。Xcode にデバッガーを再度実行するように指示すると、 OK で現在のデバッグ セッションを停止します。私が Windows にいた場合、プロセスを維持するバックグラウンド スレッドを探し始めますが、私が知る限り、NSOpenPanel はそのようなことをすべきではありません。
プログラムをさらに単純化して、まったく新しい Cocoa アプリケーションを作成し、上記のコード スニペットを挿入するだけにしました。テンプレート プロジェクトへのその他の追加や更新は一切ありません。
最後に、アプリケーションが Leaks Performance Tool の下で実行されると、パネルが作成されても使用されない場合、すべてが正常に実行されます。ただし、作成して実際に使用すると、実行の最後に、ツールで次のメッセージが表示されます。これをグーグルで検索すると痛いです。私が正しく読んだ場合、デバッガーにはターゲットプロセスを完全に強制終了するための十分な権限がありません??? ばかげているように聞こえますが... 意味がありません。
別の更新 - NSOpenPanel も使用する SDK サンプル アプリケーションの 1 つである FunHouse をダウンロードして実行しました。まあ、私は特別だと感じませんか。まったく同じ動作を示します。したがって、このことから、Apple のコードにバグがあるか、私のマシンが特別で台無しになっているか、最終的には、私のコードではないことが原因であると結論付けます。それが最高の部分です。明日、私は友人の Mac を使用して、彼のボックスで同じ動作が見られるかどうかを確認します。
これは奇妙すぎる。