• NSError


    关于 NSError

    转自 http://blog.sina.com.cn/s/blog_71715bf801019ymq.html

    一、获取系统的错误信息
    比如移动文件时,获取文件操作错误:
    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;

    例如:

    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
     
        NSString *errorMsg;
     
        if ([[error domain] isEqualToString:NSURLErrorDomain]) {
            switch ([error code]) {
                case NSURLErrorCannotFindHost:
                    errorMsg = NSLocalizedString(@"Cannot find specified host. Retype URL.", nil);
                    break;
                case NSURLErrorCannotConnectToHost:
                    errorMsg = NSLocalizedString(@"Cannot connect to specified host. Server may be down.", nil);
                    break;
                case NSURLErrorNotConnectedToInternet:
                    errorMsg = NSLocalizedString(@"Cannot connect to the internet. Service may not be available.", nil);
                    break;
                default:
                    errorMsg = [error localizedDescription];
                    break;
            }
        } else {
            errorMsg = [error localizedDescription];
        }
     
        UIAlertView *av = [[UIAlertView alloc] initWithTitle:
            NSLocalizedString(@"Error Loading Page", nil)
            message:errorMsg delegate:self
            cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
        [av show];
    }
  • 相关阅读:
    async源码学习
    js 数组去重
    node通过http.request向其他服务器上传文件
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
    学习CSS布局
  • 原文地址:https://www.cnblogs.com/linyawen/p/2960286.html
Copyright © 2020-2023  润新知