一、獲取系統的錯誤信息
比如移動文件時,獲取文件操作錯誤:
NSError *e = nil;
[[NSFileManager defaultManager] moveItemAtPath:sourcePath toPath:targetPath error:&e];
if (e) {
NSLog(@"move failed:%@", [e localizedDescription]);
}
先定一個空的錯誤信息
NSError *e = nil;
取地址
&e
如果有錯誤信息,打印錯誤的本地化描述
if (e) { NSLog(@"move failed:%@", [e localizedDescription]); }
二、自定義錯誤信息
通常可以通過下面語句,自定義個NSError對象
#define CustomErrorDomain @"com.xiaodao.test" typedef enum { XDefultFailed = -1000, XRegisterFailed, XConnectFailed, XNotBindedFailed }CustomErrorFailed;
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"is a error test" forKey:NSLocalizedDescriptionKey];
NSError *aError = [NSError errorWithDomain:CustomErrorDomain code:XDefultFailed userInfo:userInfo];
其中,自定義錯誤域對象CustomErrorDomain,通常用域名反寫,也可以是任何其他字符串
code錯誤標識, 系統的code一般都大於零,自定code可以用枚舉(最好用負數, 但不是必須的)
userInfo自定義錯誤信息,NSLocalizedDescriptionKey是NSError頭文件中預定義的鍵,標識錯誤的本地化描述
可以通過NSError的localizedDescription方法獲得對應的值信息
主調用函數一般傳入NSError指針的指針,來獲取錯誤信息,例如
- (Bool)doSomething:(NSDictionary *)parameter1 error:(NSError **)aError { //TODO: do something
*aError = [NSError errorWithDomain:CustomErrorDomain code:XDefultFailed userInfo:userInfo];
return Yes;
}
三、NSError頭文件解析
1.NSError對象中,主要有三個私有變量
錯誤域(NSInteger): _domain
錯誤標示(NSString *):_code
錯誤詳細信息(NSDictionary *):_userInfo
通常用_domain和_code一起標識一個錯誤信息
獲取_domain
- (NSString *)domain;
獲取 _code
- (NSInteger)code;
獲取 _userInfo
- (NSDictionary *)userInfo;
2.預定義域
AppKit和Foundation庫中主要的錯誤域
NSString *const NSCocoaErrorDomain;
其他域
NSString *const NSPOSIXErrorDomain; NSString *const NSOSStatusErrorDomain; NSString *const NSMachErrorDomain;
3.預定義的userinfo鍵名
推薦的標准方式,通用鍵
NSString *const NSUnderlyingErrorKey;
其他鍵,對應各自讀取信息的方法:
詳細描述鍵
NSString *const NSLocalizedDescriptionKey;
取方法
- (NSString *)localizedDescription;
失敗原因鍵
NSString *const NSLocalizedFailureReasonErrorKey
取方法
- (NSString *)localizedFailureReason;
恢復建議鍵
NSString *const NSLocalizedRecoverySuggestionErrorKey;
取方法
- (NSString *)localizedRecoverySuggestion;
恢復選項鍵
NSString *const NSLocalizedRecoveryOptionsErrorKey
取方法
- (NSArray *)localizedRecoveryOptions;
其他鍵
NSString *const NSRecoveryAttempterErrorKey; NSString *const NSHelpAnchorErrorKey; NSString *const NSStringEncodingErrorKey ; NSString *const NSURLErrorKey; NSString *const NSFilePathErrorKey;
用法:
NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"這是錯誤詳細的描述信息", NSLocalizedDescriptionKey, error, NSUnderlyingErrorKey, nil]];
4.主要的初始化方法:
- (id)initWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;
+ (id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;