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用法规范的更多相关文章

  1. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  2. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  3. iOS团队代码规范

    iOS团队代码规范 工程之始可能需要的工具: 1.使用CocoaPods类库管理工具.CocoaPods安装和使用教程. 2.下载安装注释插件VVDocumenter-Xcode. 一.项目结构管理 ...

  4. IOS开发-代码规范

    代码风格的重要性对于一个团队和项目来说不言而喻.网上有许多 Objective-C 的代码风格,但这份简洁而又最符合苹果的规范,同时有助于养成良好的代码习惯,也是我们团队一直遵循的代码风格. 写法没有 ...

  5. iOS 代码开发规范

    最近公司因为业务增多,又招了一个iOS小伙伴,内心无比开心呀.但是多了一个人,日常代码开发就要统一规范起来,方便日后维护和查找.下边列一下我日常用到一些代码规范. (一).SVN规范 1.代码一定要先 ...

  6. iOS NSError

    写在前面 在iOS开发中,NSError的使用非常常见,使用也比较简单,也正因为简单,所以对这一部分知识不甚注重.但是近期在做app底层网络封装时发现了一些问题.我使用的网络框架是AFNetworki ...

  7. ios之编码规范具体说明

    iOS代码规范: 所有代码规范所有遵循苹果sdk的原则,不清楚的请訪问苹果SDK文档或下载官方Demo查看. 1.project部分: 将项目中每一个功能模块相应的源文件放入同一目录下,使用虚拟目录. ...

  8. IOS UIButton用法详解

    这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举了.希望对大家有用.   //这里创建一个圆角矩形的按钮UIButton *button1 = [UIButton buttonWi ...

  9. iOS - 沙盒规范

    1.模拟器沙盒目录文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library. 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件 ...

随机推荐

  1. Windows 10 后台音频

    UWP版本的网易云音乐已经上架,虽然还不支持Windows Phone但是整体而言功能已经比较齐全了! 那么如何在Windows 10 UWP实现后台播放呢? 我之前是一直在做Windows Phon ...

  2. Sql server使用Merge关键字做插入或更新操作

    Merge是关于对于两个表之间的数据进行操作的. 要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做Insert,Update,Delete操作 MERGE语句的基本语法: MERG ...

  3. MVC————扩展方法MvcHtmlString

    使用前: public static class MyHtmlHelper { public static string GroupPage(this HtmlHelper helper) { str ...

  4. IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错

    某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:re ...

  5. 3-cd 命令总结

  6. python环境搭建-Pycharm 调整字体大小

  7. 控制器中获取store

    在Controller中要获取View中的选中值我用[javascript] view plaincopyprint?var cmp = Ext.ComponentQuery.query('weldl ...

  8. android -- 之PopupWindow的使用

    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View contentVi ...

  9. java 上传图片 并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  10. 【BZOJ 2594】【WC 2006】水管局长数据加强版

    离线后倒过来做,这样就跟魔法森林差不多了,缩边为点就可以统计边的权值了. 1A真是爽,可惜常数炸上了天,这是滥用stl容器和无脑link,cut的后果 #include<map> #inc ...