一、获取系统的错误信息

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

  1. NSError *e = nil;
    [[NSFileManager defaultManager] moveItemAtPath:sourcePath toPath:targetPath error:&e];
    if (e) {
      NSLog(@"move failed:%@", [e localizedDescription]);
    }

先定一个空的错误信息

  1. NSError *e = nil;

取地址

  1. &e

如果有错误信息,打印错误的本地化描述

  1. if (e) {
  2.   NSLog(@"move failed:%@", [e localizedDescription]);
  3. }

二、自定义错误信息

通常可以通过下面语句,自定义个NSError对象

  1. #define CustomErrorDomain @"com.xiaodao.test"
  2. typedef enum {
  3.  
  4.    XDefultFailed = -1000,
  5.  
  6.    XRegisterFailed,
  7.  
  8.    XConnectFailed,
  9.  
  10.    XNotBindedFailed
  11.  
  12. }CustomErrorFailed;
  1. NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"is a error test" forKey:NSLocalizedDescriptionKey];
  1. NSError *aError = [NSError errorWithDomain:CustomErrorDomain code:XDefultFailed userInfo:userInfo];

其中,自定义错误域对象CustomErrorDomain,通常用域名反写,也可以是任何其他字符串

code错误标识, 系统的code一般都大于零,自定code可以用枚举(最好用负数, 但不是必须的)

userInfo自定义错误信息,NSLocalizedDescriptionKey是NSError头文件中预定义的键,标识错误的本地化描述

可以通过NSError的localizedDescription方法获得对应的值信息

主调用函数一般传入NSError指针的指针,来获取错误信息,例如

  1. - (Bool)doSomething:(NSDictionary *)parameter1 error:(NSError **)aError
  2. {
  3. //TODO: do something
      *aError = [NSError errorWithDomain:CustomErrorDomain code:XDefultFailed userInfo:userInfo];
      return Yes;
  1. }

三、NSError头文件解析

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

错误域(NSInteger): _domain

错误标示(NSString *):_code

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

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

获取_domain

  1. - (NSString *)domain;

获取 _code

  1. - (NSInteger)code;

获取 _userInfo

  1. - (NSDictionary *)userInfo;

2.预定义域

AppKit和Foundation库中主要的错误域

  1. NSString *const NSCocoaErrorDomain;

其他域

  1. NSString *const NSPOSIXErrorDomain;
  2. NSString *const NSOSStatusErrorDomain;
  3. NSString *const NSMachErrorDomain;

3.预定义的userinfo键名

推荐的标准方式,通用键

  1. NSString *const NSUnderlyingErrorKey;

其他键,对应各自读取信息的方法:

详细描述键

  1. NSString *const NSLocalizedDescriptionKey;

取方法

  1. - (NSString *)localizedDescription;

失败原因键

  1. NSString *const NSLocalizedFailureReasonErrorKey

取方法

  1. - (NSString *)localizedFailureReason;

恢复建议键

  1. NSString *const NSLocalizedRecoverySuggestionErrorKey;

取方法

  1. - (NSString *)localizedRecoverySuggestion;

恢复选项键

  1. NSString *const NSLocalizedRecoveryOptionsErrorKey

取方法

  1. - (NSArray *)localizedRecoveryOptions;

其他键

  1. NSString *const NSRecoveryAttempterErrorKey;
  2. NSString *const NSHelpAnchorErrorKey;
  3. NSString *const NSStringEncodingErrorKey ;
  4. NSString *const NSURLErrorKey;
  5. NSString *const NSFilePathErrorKey;

用法:

  1. NSDictionary *userInfo [NSDictionary dictionaryWithObjectsAndKeys:@"这是错误详细的描述信息", NSLocalizedDescriptionKey, error, NSUnderlyingErrorKey, nil]];

4.主要的初始化方法:

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

错误信息 NSError的更多相关文章

  1. AFNetworking 打印错误信息(二进制信息)

    AFNetworking 打印错误信息(二进制信息) NSError *underError = error.userInfo[@"NSUnderlyingError"]; NSD ...

  2. IIS将错误信息发送到浏览器

    本文版权归博客园和dige1993所有,访问作者博客:http://www.cnblogs.com/dige1993 最近又开始玩ASP了,调试的时候出现错误不清楚详细错误信息特别不方便,记得以前可以 ...

  3. 【原】iOS学习之Xcode8关于控制台不打印错误信息

    前几天将我的Xcode升到了8,但是在运行程序时,会打印很多没有用的信息,如下图: Xcode8运行程序时打印的乱码 于是各种寻求答案,找到如下答案: Edit Scheme-> Run -&g ...

  4. Ajax调用处理页面错误信息500的解决思路

    最近在做项目的时候遇到一个问题:(李昌辉) 在本地服务器上做好之后,部署到阿里云虚拟主机,结果访问页面出现问题,由于登录使用的是AJAX调用处理页面,所以在点击登录的时候没有任何反应. 打开F12调试 ...

  5. 错误信息:内存位置访问无效。 (Exception from HRESULT: 0x800703E6)

    错误提示: 错误信息:内存位置访问无效. (Exception from HRESULT: 0x800703E6) 异常类型:System.BadImageFormatException 堆栈跟踪: ...

  6. PHP通过ini_set()来设置显示错误信息和执行时间

    PHP的 ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效.不是所有的选项都能被改函数设置的.具体那些值能够设置,可以查看手册中的列表. 就是能够设置php.ini ...

  7. 错误信息:attempt to create saveOrUpdate event with null entity

    错误信息:attempt to create saveOrUpdate event with null entity; 这个错误网上答案比较多,我也不多说了. 我遇到的问题是在前台传过来的参数是nul ...

  8. jquery.validate使用 - 自定义错误信息

    自定义错误消息的显示方式 默认情况下,验证提示信息用label元素来显示, 并且会添加css class, 通过css可以很方便设置出错控件以及错误信息的显示方式. /* 输入控件验证出错*/form ...

  9. jquery ajax的error错误信息

    项目开发中ajax的异常处理起来算是比较头疼的,因为是异步请求,所以即使ajax异常程序依然会继续执行,导致找ajax的异常比较麻烦. 今天处理ajax异常时搜到一篇文章,提到error可以返回aja ...

随机推荐

  1. LC 163. Missing Ranges 【lock, hard】

    Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, up ...

  2. RxJava2实战--第二章 RxJava基础知识

    第二章 RxJava基础知识 1. Observable 1.1 RxJava的使用三步骤 创建Observable 创建Observer 使用subscribe()进行订阅 Observable.j ...

  3. laravel多主多从配置示例

    'mysql' => [ 'write' => [ [ 'host' => '192.168.1.180', 'username' => '', 'password' => ...

  4. 1031: [编程入门]自定义函数之字符串反转(python)

    问题 1031: [编程入门]自定义函数之字符串反转 时间限制: 1Sec 内存限制: 128MB 提交: 7225 解决: 3331 题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入 ...

  5. golang depth read map

    Foreword: I optimized and improved the below solution, and released it as a library here: github.com ...

  6. linux上wps2019不能启动解决方法

    本人linux上的wps2016升级成wps2019后启动不了,双击图标没反应,在命令行输入wps,提示"/lib64/libc.so.6: version `GLIBC_2.18' not ...

  7. HTML中Data的数据类型

    "data"类型的Url格式,是在RFC2397中提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入. 例如对于img这个Tag,哪怕这个图片非常非常的小 ...

  8. 云计算核心组件--keystone身份认证服务(5)

    一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等 ...

  9. Tensorf实战第九课(自编码AutoEncoder)

    本节我们将了解神经网络进行非监督形式的学习,即autoencoder自编码 假设图片经过神经网络后再输出的过程,我们看作是图片先被压缩然后解压的过程.那么在压缩的时候,原有的图片质量被缩减,解压时用信 ...

  10. Object的构造函数方法

    参考自MDN Object 构造函数的方法 1.Object.assign() 将可枚举属性的值从一个或多个源对象复制到目标对象. 2.Object.create() 创建一个新对象,继承现有对象的构 ...