2012-05-11 13 views
5

時々、私はobjective-cコードの中から例外を受け取ります。私の例では、これらの例外は重要ではありませんし、私はアプリケーションが動作し続けたい。 質問はどのようにこれらの例外を処理するのですか?MonotouchでのObjC例外の処理

たとえば、GeoCoderクラスを使用しているときに私のアプリがクラッシュすることがあります。ジオコーダーが場所のジオコーディングに失敗しても、私のアプリケーションを生き生きとしたままにしたいのであれば、私は本当に気にしません。 try-catchブロック内のジオコーダー呼び出しを含めても問題は解決しません。

ご協力いただければ幸いです!

答えて

6

MonoTouchは、ObjC例外を管理例外に変換することをある程度試行します。これは、ObjC例外に対する未処理の例外ハンドラを追加することによって行われ、そこではマネージ例外がスローされます。これはセカンダリスレッドでは動作しますが、メインスレッドでは動作しません。なぜなら、iOSはメイン実行ループにtry-catchハンドラを持っているからです。例外が発生した場合にアプリケーションを終了させます(例外は処理されるため、 MonoTouchの未処理の例外ハンドラに達する)。

最も良い方法は、最初にObjCの例外を避けることです(Appleのドキュメントでは、ObjCの例外は本当に例外的な状況にのみ使用する必要があると述べています。

ObjCの例外をすべて回避することはできませんので、まだ発生している場合の回避策を見つけようとします。特定のケースでこれを行うには、完全なテストケースを作成し、ここにバグレポート(http://bugzilla.xamarin.com)を開いてテストケースを添付することが最善の方法です。