web-dev-qa-db-ja.com

Cocoaアプリケーションにアプリケーション自体の中から終了するように指示するにはどうすればよいですか?

Cocoaアプリケーションにそれ自体を終了するように指示する良い方法を探しています。これは本番コードには使用されませんのでご安心ください。 1つのテストを実行し、デバッグ中にアプリケーションを閉じる簡単な方法を探しています。

exit(0);はアプリを閉じますが、通常のアプリケーション終了手順をすべてバイパスするので、すべてをそのままにしておきたいと思います。

基本的に、ユーザーがメニューから「終了」を引いたかのように動作させたいのですが、テストが終了した後、自動的に実行されるようにしたいのです。

私のコードは現在次のようになっています:

#if (SUPERFANCY_TESTING_MODE)
    [self doSomething];
    exit(0); // <-- I need something better to go here
#endif
35
e.James

アプリが少なくとも一部の時間は強制終了されるので、かなり安心できます。したがって、exit(0);isのような出口に対する防御が必要です。

ただし、NSApplicationは-terminate:メソッドを実装します。

[NSApp terminate: nil];はあなたがやりたいことをするべきです。

通常、イベントループの次のパスの先頭で強制的に発生させるために、0.0の遅延で-performSelector:afterDelay:を介して投稿することをお勧めします。

例:

[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];
85
bbum