• IOS 的 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;


    参考链接:https://www.cnblogs.com/xiaodao/archive/2012/07/04/2576292.html
  • 相关阅读:
    15款精美的 WordPress 电子商务网站模板
    15套免费的扁平化界面设计素材【免费下载】
    35幅使用小图片组成的创意插图作品 【上篇】
    sqlserver2014两台不同服务器上数据库同步
    C++ Reflection Library
    美国的包容主要体现在接受移民,那么,中国的包容主要体现在哪里呢?答案就是资本
    mysql主从复制
    Kubernetes+Istio
    Net异步编程
    研发的困境----DEVOPS
  • 原文地址:https://www.cnblogs.com/isItOk/p/5006965.html
Copyright © 2020-2023  润新知