错误信息 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;
错误信息 NSError的更多相关文章
- AFNetworking 打印错误信息(二进制信息)
AFNetworking 打印错误信息(二进制信息) NSError *underError = error.userInfo[@"NSUnderlyingError"]; NSD ...
- IIS将错误信息发送到浏览器
本文版权归博客园和dige1993所有,访问作者博客:http://www.cnblogs.com/dige1993 最近又开始玩ASP了,调试的时候出现错误不清楚详细错误信息特别不方便,记得以前可以 ...
- 【原】iOS学习之Xcode8关于控制台不打印错误信息
前几天将我的Xcode升到了8,但是在运行程序时,会打印很多没有用的信息,如下图: Xcode8运行程序时打印的乱码 于是各种寻求答案,找到如下答案: Edit Scheme-> Run -&g ...
- Ajax调用处理页面错误信息500的解决思路
最近在做项目的时候遇到一个问题:(李昌辉) 在本地服务器上做好之后,部署到阿里云虚拟主机,结果访问页面出现问题,由于登录使用的是AJAX调用处理页面,所以在点击登录的时候没有任何反应. 打开F12调试 ...
- 错误信息:内存位置访问无效。 (Exception from HRESULT: 0x800703E6)
错误提示: 错误信息:内存位置访问无效. (Exception from HRESULT: 0x800703E6) 异常类型:System.BadImageFormatException 堆栈跟踪: ...
- PHP通过ini_set()来设置显示错误信息和执行时间
PHP的 ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效.不是所有的选项都能被改函数设置的.具体那些值能够设置,可以查看手册中的列表. 就是能够设置php.ini ...
- 错误信息:attempt to create saveOrUpdate event with null entity
错误信息:attempt to create saveOrUpdate event with null entity; 这个错误网上答案比较多,我也不多说了. 我遇到的问题是在前台传过来的参数是nul ...
- jquery.validate使用 - 自定义错误信息
自定义错误消息的显示方式 默认情况下,验证提示信息用label元素来显示, 并且会添加css class, 通过css可以很方便设置出错控件以及错误信息的显示方式. /* 输入控件验证出错*/form ...
- jquery ajax的error错误信息
项目开发中ajax的异常处理起来算是比较头疼的,因为是异步请求,所以即使ajax异常程序依然会继续执行,导致找ajax的异常比较麻烦. 今天处理ajax异常时搜到一篇文章,提到error可以返回aja ...
随机推荐
- python--nolocal
Compare this, without using nonlocal: x = 0def outer(): x = 1 def inner(): x = 2 print("inner:& ...
- Vue常见的框架
1. Element:一套为开发者,设计师和产品经理准备的基于Vue 2.0的桌面端组件库 地址:https://element.eleme.cn/#/zh-CN 2.iview:主要服务于PC界面的 ...
- vue问题六:计算属性,依赖发生变化时,重新计算computed:
<el-form-item label="单价:" prop="price" > <el-input v-model="addfor ...
- leetcode 547朋友圈
方法一:染色法 类似于岛屿的个数也可以用染色法:通过深度优先搜索来做 使用一个数组来表示当前朋友a是否已经包含到已经遍历的朋友圈中,遍历所有的朋友,如果当前朋友没有在已经访问的朋友圈中,即visite ...
- iOS开发之点击tabBarItem进行Push一个页面
使用场景: 实现底部Tabbar两个TabBarItem,点击第二个跳转push到个人信息页面: 实现步骤: 首先设置UITabBarController的代理为appdelegate如下:myTab ...
- 【SVN】导出项目后报错汇总
原文链接 1.jsp页面内:标点符号,引入报错 解决方法:关闭此项目的jsp验证,右键,最下面一个,Verification,右边一溜只留一个dtd就好 2. 编码问题-乱码 刚拉下来的项目编码可能与 ...
- phpstorm 远程连接服务器进行开发
phpstorm phpstorm是一款功能强大的ide编辑器,有了它,你敲代码速度能比用notepad++快数倍(初学者不建议使用ide,建议使用notepad++),缺点是没有固态的电脑带起来吃力 ...
- Pandas时间序列和分组聚合
#时间序列import pandas as pd import numpy as np # 生成一段时间范围 ''' 该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start.e ...
- MSF魔鬼训练营-3.5.3 MSF中常用的关于数据库的命令
渗透测试数据库用来保存渗透测试过程中获取的各种数据,很多时候你重启了kali发现连接不上数据库了,其实就是因为这个服务没开 MSF所使用的数据库时postgresql root@kali:/# ser ...
- 如何使用JavaScript实现前端导入和导出excel文件
一.SpreadJS 简介 SpreadJS 是一款基于 HTML5 的纯 JavaScript 电子表格和网格功能控件,以“高速低耗.纯前端.零依赖”为产品特色,可嵌入任何操作系统,同时满足 .NE ...