私は単純なCocoaアプリケーションを作成しています。コアデータも複数のドキュメントもサポートしていません。 Mac Pro、OS X 10.6.6、Xcode 3.2.3で動作します。NSOpenPanelのrunModalを呼び出すと、アプリケーションが正常に終了しない
私はAppDelegateクラスに次のコードを自分のアプリケーションを削減しました:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel runModal];
return;
}
デバッガ内から、私は自分のアプリケーションを実行します。予想どおり、あまり役に立たないOpenPanelが現れます。私はキャンセルをクリックし、それは消えます。これはすべて期待通りです。 [Command + Q]をクリックしてアプリケーションを終了すると、UIは消えますが、デバッガはアプリケーションがまだ実行中であることを(コンソール出力と同様に)表示します。
私が読んでいるすべての情報に基づいて、これを正しく実行するためには何もする必要はありません。私は、Open Panelの使い方についていくつかの例をダウンロードしましたが、ほとんどはの非推奨のモーダルを開く方法を使用して、追加情報をパラメータとして与えています。 FWIW、私はそれらの方法を試み、同じ結果を見ている。
Openダイアログが表示されたときに、アプリケーションが着信接続を受信するかどうかを尋ねるメッセージボックスが表示されます。ダイアログがすばやく消えます。それが私の問題の一部であるかどうかわかりません。 [アップデート - 私のファイアウォールがオンになっていることを処理します]
はい、私はObjective Cでかなり新しいですが、一般的なプログラミングではありません。知恵の言葉は大いに感謝しています!
2011年2月7日 - アップデート:
私は何事もなく線でデバッガラインを歩いてきました。コンソールウィンドウにはプログラムの失敗の兆候はありません。
[プロセスの停止]ツールバーボタンが[ブレイク]ボタンと同じように有効になっているため、[コマンド+ Q]の後でもデバッガが有効であると言います。さらに、コンソールは、アプリケーションに(メニューまたはキーコマンドを介して)終了するように指示した後、まだ実行中であることを示します。以下は、実行の開始からアプリケーションの終了後までのCompleteコンソールの出力です。
Program loaded.
run
[Switching to process 62370]
Running...
アクティビティモニタ(システムツール)は、自分のアプリケーションの終了が表示されます(もはやプロセスとして表示されます)が、デバッガは、まだ「編集」モードに移行しません - 私は再びデバッガを実行するためのXcodeを伝える場合現在のデバッグセッションを止めることができたら尋ねられます。私がWindowsにいた場合、バックグラウンドスレッドを探してプロセスを生き残らせることができますが、私が知る限りNSOpenPanelはそのようなことをすべきではありません。
私はさらに、新しいCocoaアプリケーションを作成し、上記のコードスニペットを挿入するだけで、テンプレートプロジェクトやその他のアップデートの追加は一切行っていません。
最後に、アプリケーションがLeaks Performance Toolで実行されると、パネルが作成されたが使用されていないときにすべて正常に動作します。実際に作成され実際に使用されると、実行の最後にツール "insufficient task_for_pid privileges(leakagent64)"に次のメッセージが表示されます。グーグルでこれは痛い。私はそれを正しく読んだ場合、デバッガは、ターゲットプロセスを完全に殺すのに十分な権限を持っていない???今、それは馬鹿に聞こえるが...それは意味をなさない!
もう1つのアップデート - 私はちょうどNSOpenPanelを使用するSDKサンプルアプリケーションの1つであるFunHouseをダウンロードして実行しました。私は特別な気がしません。それは同じ正確な振る舞いを示す。だから、私は、Appleがコードにバグを持っているか、私のマシンが特別なことをしてしまっていると結論づけています。そして最後に、私のコードではありません。それは最高の部分です。明日、私は友人のMacを使用して、彼の箱に同じ行動が示されているかどうかを確認します。
これはあまりにも奇妙です。
そのメソッドでダミーの 'NSLog'-callまたはブレークポイントを振りかけると、次のようになります。コンソールに出力が表示されますか?またはブレークポイントがヒットしましたか?あなたが言及したダイアログは、あなたのアプリケーションにデバッガをアタッチするための確認を求めるものです。 – danyowdee
@danyowdee上記のテキストの更新を参照してください。言及されたダイアログ(OpenPanelではなく)は、私が信じるリモート/ファイアウォールアクセスを許可することを意味します。私は1秒後にそれをグーグルで調べます。 – Userdano
これはあまりにも信念です:-pどのような_exactly_ダイアログが表示されます(詳細を表示するためにダイアログ内の開示 - 三角形をヒット)し、どのように反応しましたか? – danyowdee