2011-07-26 2 views
0

iOSのライブラリを1つの.hファイル(MyAdaptedViewController.h)で参照しています。iOS:ライブラリがアプリケーション全体をクラッシュさせないようにする

これは基本的に、完全なUIViewControllerの内部にあるビューです。

しかし、ライブラリの性質上、信号処理、ネットワーク接続、オーディオ入出力を処理するとクラッシュする可能性があります。

単一のUIViewControllerでクラッシュが発生した場合、つまりクラッシュが発生した場合、MyAdaptedViewControllerが無効の間にユーザーがアプリを使用し続けることができた場合、アプリケーション全体がクラッシュすることを防ぎます。私はこれがクラッシュのタイプに依存することを理解していますが、ほとんどのクラッシュ/例外がキャッチされることを望んでいましたか?

など。

は{} @キャッチ{}または

無効たuncaughtExceptionHandler(NSException *例外)

が可能なソリューションであることを@tryでしょうか?

答えて

-1

Mmm、明らかにライブラリが予期しない例外を発生させ、アプリケーションをクラッシュさせないようにすることはできますが、ライブラリ内のエラーを処理することは好ましくありません。クラッシュが発生し、より局所的に処理し、そのライブラリ内のオブジェクトを「エラー」状態にして、UIViewControllerにメッセージを送信して通知します。

このようにサンドボックスしなければならない場合は、ライブラリが不安定に聞こえると思うだけです。私はライブラリがいくつかのクールなものをやっていると確信していますが、それは間違いなくそれを強化する価値があるでしょう。

2

NO! iOSアプリケーションで例外をキャッチすることは、通常のCocoaコーディング規則の例外です。

NSExceptionは、実行時にリカバリできない例外的なエラーです。 NSErrorは、実行時に回復するか、少なくともユーザーを表示するために除外されるエラーです。

例外をキャッチすることによって発生する可能性のあるすべてのエラーを処理しようとしないでください。 Appleが提供するAPIは、のみ、プログラミングエラーが発生した場合は例外を発生させます。たとえば、配列内の範囲外のオブジェクトインデックスにアクセスしようとすると、オブジェクトにアクセスする前にインデックスを正しく設定しておく必要があるため、プログラミングエラーです。

その他の場合は、アップルと同様にNSErrorのインスタンスを使用する必要があります。

これが適切な場合は、内部でlibのエラーを処理します。可能でない場合は、呼び出し元にエラーを渡し、それを処理させます。

私はトピックに関するより長いブログ記事をここに書いています:http://blog.jayway.com/2010/10/13/exceptions-and-errors-on-ios/