错误类error的学习

获取系统的错误信息

比如移动文件时,获取文件操作错误:

  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头文件解析

NSError对象中,主要有三个私有变量

错误域(NSInteger): _domain

错误标示(NSString *):_code

错误详细信息(NSDictionary *):_userInfo

通常用_domain和_code一起标识一个错误信息


获取_domain
- (NSString *)domain;

获取 _code
- (NSInteger)code;

获取 _userInfo
- (NSDictionary *)userInfo;

预定义域

AppKit和Foundation库中主要的错误域
     NSString *const NSCocoaErrorDomain;

其他域
     NSString *const NSPOSIXErrorDomain;
     NSString *const NSOSStatusErrorDomain;
     NSString *const NSMachErrorDomain;

预定义的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]];

主要的初始化方法:

- (id)initWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;
+ (id)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;