NSError

一、獲取系統的錯誤信息

比如移動文件時,獲取文件操作錯誤:

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;


轉自:http://www.cnblogs.com/xiaodao/archive/2012/07/04/2576292.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章