&tag(NSError);
*目次 [#w0ca99c5]
#contents
*参考情報 [#sa922e82]
-[[Objective-C]]
*自分でエラーオブジェクトを作る [#mf74c0d2]
NSErrorクラスのメソッドを使って簡易に作ることができる
+ (id)errorWithDomain:(NSString *)domain code:(int)code userInfo:(NSDictionary *)dict
**ドメイン名 [#i871ff22]
,NSCocoaErrorDomain,Cocoa環境に関するエラー
,NSPOSIXErrorDomain,UNIX環境に関するエラー
,NSURLErrorDomain,URL読み込みに関するエラー
などなど。自分のプログラム専用にドメインを定義することもできる。その場合はエラーコードも自分できめないといけない。
**エラーコード [#l328e8cb]
ドメインごとに決まった値を設定する。例えば、NSPOSIXErrorDomainの場合、UNIXのシステムコールでセットされるerrornoをセットする。
**ユーザー辞書 [#i699f39f]
キーと値のペアでエラーに関する情報を好きなだけセットする。キーはあらかじめ定義されたものがある。
,NSLocalizedDescriptionKey,エラー内容を説明する文字列
,NSLocalizedFailureReasonErrorKey,エラーの原因を説明する短い文字列
,NSLocalizedRecoverySuggestionErrorKey,エラーに対する対処方法を示す文字列。
などなど。
**サンプル [#e3cebf63]
自前エラーコードとエラーメッセージだけの簡単なNSErrorを生成したい場合次のようなユーティリティメソッドを定義して使うと簡単。
#pre{{
#define MyErrorDomain @"MyErrorDomain"
typedef enum
{
MyErrorCodeUnknown = 0,
MyErrorCodeParseError
} MyErrorCode;
+ (void)initError:(NSError**)error code:(MyErrorCode)code message:(NSString*)message
{
//エラー生成用のユーティリティメソッド
NSDictionary *userInfo = nil;
if (message != nil) {
userInfo = [NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey];
}
*error = [NSError errorWithDomain:MyErrorDomain code:code userInfo:userInfo];
}
+(void)parseWithError:(NSError**)error
{
if (エラー発生) {
[self initError:error code:MyErrorCode message@"parse error"];
return;
}
}
}}