一、获取系统的错误信息

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

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;

错误信息 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. 使用oracle的存储过程的例子

    十几年没有用oracle的存储过程了,有些东西已经忘了,没有想到今天又要用.在这里写个例子.它演示了存储过程的格式,游标的使用,循环.判断的使用,还有直接执行一个拼接的SQL的用法.以下是代码: cr ...

  2. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...

  3. 小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解

    笔记 2.微服务核心基础讲解     简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断         1.网关:路由转发 + 过滤器                ...

  4. 阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境

    创建数据库ssm并创建表account create database ssm; use ssm; create table account( id int primary key auto_incr ...

  5. PGI 遇到的坑

    以下记录为本人在使用PGI社区版编译器遇到的问题,包含两类问题 1,PGI编译器本身存在你的bug. 2,在其他编译器编译运行没问题,在PGI中出现问题. 版本(18.11社区版) 1,(bug)内置 ...

  6. 跨平台python异步回调机制实现和使用方法

    跨平台python异步回调机制实现和使用方法 这篇文章主要介绍了python异步回调机制的实现方法,提供了使用方法代码 1 将下面代码拷贝到一个文件,命名为asyncore.py 代码如下: impo ...

  7. 读取web工程中.properties资源文件的模板代码

    读取web工程中.properties资源文件的模板代码 // 读取web工程中.properties资源文件的模板代码 private void test2() throws IOException ...

  8. Opencv中的WMesh

    费了半天劲,终于把这个WMesh类搞懂了,可惜效果不佳,比Matlab中的mesh差多了. 使用WMesh前,需要有一个Mesh对象,Mesh是三维数据点的基本几何信息.颜色信息.索引信息等集成的对象 ...

  9. Linux增加虚拟内存方法

    例如增加2G虚拟内存,操作如下: [root@gamedb ~]# free -m[root@gamedb tmp]# dd if=/dev/zero of=/tmp/big_swap bs=1024 ...

  10. pandas 分组统计

    # coding:utf-8 import pandas as pd import numpy as np # path = r'C:\Users\wuzaipei\Desktop\桂林三金项目签到情 ...