iOS - NSError用法规范
iphone跬步之--错误信息 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;
iOS - NSError用法规范的更多相关文章
- IOS NSInvocation用法简介
IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...
- 【安全开发】IOS安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- iOS团队代码规范
iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...
- IOS开发-代码规范
代码风格的重要性对于一个团队和项目来说不言而喻.网上有许多 Objective-C 的代码风格,但这份简洁而又最符合苹果的规范,同时有助于养成良好的代码习惯,也是我们团队一直遵循的代码风格. 写法没有 ...
- iOS 代码开发规范
最近公司因为业务增多,又招了一个iOS小伙伴,内心无比开心呀.但是多了一个人,日常代码开发就要统一规范起来,方便日后维护和查找.下边列一下我日常用到一些代码规范. (一).SVN规范 1.代码一定要先 ...
- iOS NSError
写在前面 在iOS开发中,NSError的使用非常常见,使用也比较简单,也正因为简单,所以对这一部分知识不甚注重.但是近期在做app底层网络封装时发现了一些问题.我使用的网络框架是AFNetworki ...
- ios之编码规范具体说明
iOS代码规范: 所有代码规范所有遵循苹果sdk的原则,不清楚的请訪问苹果SDK文档或下载官方Demo查看. 1.project部分: 将项目中每一个功能模块相应的源文件放入同一目录下,使用虚拟目录. ...
- IOS UIButton用法详解
这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举了.希望对大家有用. //这里创建一个圆角矩形的按钮UIButton *button1 = [UIButton buttonWi ...
- iOS - 沙盒规范
1.模拟器沙盒目录文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library. 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件 ...
随机推荐
- jQuery学习笔记(二):this相关问题及选择器
上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理解的,this就是指代当前操作的DOM对象. 在jQuery中,this可以用于单 ...
- 转一篇关于如何在Unity里使用Protobuf
原帖地址: http://purdyjotut.blogspot.com/2013/10/using-protobuf-in-unity3d.html 先转过来,等时间合适了,再来收拾 Using P ...
- Windows去除快捷箭头
美化桌面 bat代码: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shel ...
- RabbitMQ官方中文入门教程(PHP版) 第一部分:Hello World
RabbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮 ...
- 【原创】解决jquery在ie中不能解析字符串类型xml结构的xml字符串的问题
$.fn.extend({ //此方法解决了ie中jquery不识别非xml的类型的xml字符串的问题 tony tan findX: function (name) { if (this & ...
- 【Alpha版本】冲刺阶段——Day 6
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...
- IOS中取乱序数据最大值、最小值方法
2016-01-12 / 23:15:58 第一种方法也是常规方法,就是设定一个默认值作为最大值,循环取比这个最大值还大的值并赋值给默认最大值,这样循环完成后这个默认最大值变量里面的值就是最大值了: ...
- Linux内核参数配置
Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的. 在/proc/sys目录下存放着大多数的 ...
- android之ViewPager的使用
XML代码 <android.support.v4.view.ViewPager ViewPager控件 android:layout_width="wrap_con ...
- PS转手绘
2014-08-03 一.人物皮肤处理 复制两层图层,对背景图层隐藏,最后一层 高斯模糊 ,按住ALT创建图层蒙版, 使用画笔工具涂抹人物皮肤,眼睛不涂,把阴影和高光处抹均匀,最后应用图层蒙版,向下 ...