4

サーバーとやり取りして GUI を表示する Cocoa アプリがあります。致命的なエラーが発生した場合は、アラートを表示して終了します。他の UNIX ベースのツールとの対話を容易にするために、エラーが発生したことを反映するために終了ステータスをゼロ以外の値に設定したいと考えています。

残念ながら、これを行う良い方法を見つけることができませんでした.NSApplicationには終了ステータスを設定する方法がないようです. 現時点では、NSApplication をサブクラス化し、ivar exitStatus(必要に応じてアプリのデリゲートに設定) を追加し、オーバーライド-terminate:してexit(exitStatus). terminate:これは問題なく動作しますが、標準が舞台裏で行っている重要な何かを見落としている可能性があることは言うまでもなく、少し汚れているように思えます。ステータスを設定する機会がない[super terminate:sender]ため、サブクラス化されたメソッドを呼び出すことはできません。exit()

明らかな何かが欠けていますか?

4

2 に答える 2

5

要するに、exit(3)標準の Cocoa ティアダウンメカニズムを呼び出して完全にバイパスする、終了コードを設定できません (説明したようにフープをジャンプすることなく)。

Jason が述べたように、アプリの分解中にシステムに重大な問題が発生することはありません。一方、あなたのアプリには何か重要なものがあるかもしれませんが、それは完全にあなたのアプリの実装によるものです (デフォルトでは Cocoa には何もありません)。

しかし、実際にはそうしないでください。ユーザーはそれにもかかわらず強制終了するのが好きであり、アプリはその結果として壊滅的に失敗しないように設計する必要があります。

于 2010-04-30T15:19:41.167 に答える
1

UNIXベースのツールと対話するための他のよりクリーンな方法があります。たとえば、アプリをハッキングしてコードを返すことなく、ツールがコードを取得できるテキストファイルにコードを書き込むことで、終了コードをシミュレートできます。アプリのstdout/consoleを使用することも可能です。

于 2010-04-30T15:32:34.610 に答える