Objective-Cエラー処理


Objective-Cエラー処理
OCのエラーErrorはすべてのエラーを指します.エラーは、プログラムコード自体の論理エラーと、外部条件による実行エラーの2つに分けられます.プログラム自体のエラーは通常ユーザーに知られず、これらのエラーの処理はプログラムの正常な実行を保証するためであり、これらのエラーはプログラマが犯したエラーとも言える.例えば、配列の境界を越えたアクセスなどである.実行時に外部条件によるエラーは、ネットワークの切断、ダウンロードデータの失敗など、通常は制御できません.通常、エラーメッセージをユーザーに表示する必要があります.JAVAのすべてのエラーはExceptionで処理されますが、OCでは異なります.NSErrorは通常、実行時のエラーを処理するために使用されます.NSExceptionはプログラマーのエラーを処理するために使用されます.
- NSError
1.エラーの注意
CocoaとCocoa Touchのクラスには、エラーが発生すると、他の方法でこのエラーを処理するためにエラーオブジェクトが投げ出されるエラーアラートに関する方法がたくさんあります.多くのプロトコルは例外処理方法を定義し,パラメータはNSErrorオブジェクトである.NSErrorオブジェクトは、エラーコード、エラードメイン、およびエラー記述をカプセル化します.CocoaとCocoa Touchは多くのエラーを異なるエラードメイン(Error Domain)に分割する.
2.エラー・オブジェクトのポインタを返す方法
CocoaとCocoa Touchのクラスでは、エラーを直接投げ出すのではなく、指定したポインタにエラーオブジェクトを割り当てる方法があります.たとえば、NSDataクラスのメソッド
writeToURL:options:error:。
NSError *anyError;
BOOL success = [receivedData writeToURL:someLocalFileURL options:0 error:&anyError];
if (!success) {
    NSLog(@"Write failed with error: %@", anyError);
          // present error to user
}

エラーが発生すると、エラーの参照がanyErrorに割り当てられ、ブール値が返されます.使用する場合、成功したか否か(エラーは発生していない)を判断するには、ポインタがエラーを指しているか否かを判断するのではなく、戻り値を判断することによって判断すべきである.もちろん、エラーオブジェクトに関心がなく、成功したか否かのみに関心がある場合は、errorのパラメータとしてNULLを用いることができる.
3.処理可能なエラーの処理と提示
新しいエラークラスは、まずエラードメインを新規に作成します.エラードメインの構成は通常、com.companyName.appOrFrameworkName.ErrorDomainこのドメイン内のエラーごとに一意のエラーコードを選択し、説明を追加します(これはユーザー辞書に格納されます):
NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain";
NSString *desc = NSLocalizedString(@"Unable to…", @"");
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc };
NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo];

-例外処理NSException
Javaと同じ、try-catch:
@try{ }
@catch(NSException *exception){ }
@finally{ }