1

久しぶりの潜伏者、初めてのポスター。

バックグラウンド タスクを管理するために NSOperationQueues を多用するココア アプリを作成しています。このアプリは、手動で管理された NSThreads を使用して同様のことを行っていた、かなり古いアプリを書き直したものです。

要件の 1 つは、アプリの終了を回避するために、キャッチされていないすべての例外をトラップ/ログに記録することです。アプリの古いバージョンでは、NSExceptionHandler API を使用してすべてのスレッドに例外トラップをインストールしていました。スレッドから取り除かれた抽象化のレベルになったので、スレッド オブジェクトにアクセスできません (実際、キューで使用されるスレッドは操作の呼び出しごとに変わる可能性があるという印象を受けています)。

バックグラウンド操作が失敗したときにアプリがクラッシュしないようにするための推奨/最善の方法は何ですか?

それが重要な場合、展開は Mac OS X 10.6 です。

4

1 に答える 1

1

私は以下を使用して自分でこれを解決しました:

NSInteger mask = (NSLogUncaughtExceptionMask| NSHandleUncaughtExceptionMask | NSLogUncaughtSystemExceptionMask | NSHandleUncaughtSystemExceptionMask | NSLogUncaughtRuntimeErrorMask | NSHandleUncaughtRuntimeErrorMask | NSLogTopLevelExceptionMask | NSHandleTopLevelExceptionMask);
[[NSExceptionHandler defaultExceptionHandler] setDelegate:[[MyExceptionHandler new] autorelease]];      
[[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:mask];

詳細は、ガイドの「例外プログラミングのトピック」のセクション「例外へのプログラムの応答の制御」に記載されています。

于 2012-12-09T16:18:36.850 に答える