文档章节

NSError

风吹筝
 风吹筝
发布于 2016/07/22 15:41
字数 917
阅读 8
收藏 0
点赞 0
评论 0

————————————转载自麦芒实验室——————————————

NSError是系统提供的错误类,继承于NSObject,用于获取系统错误或者自定义错误。

它不同于NSException,异常未捕获则会导致程序崩溃。NSError只是返回一个错误信息,对外部调用者来说可以随意处理这个错误,仅仅是告诉调用者这个方法发生了错误而已。

NSError对象封装了更为丰富、更易扩展的错误信息。你可以只是用错误代码或者错误描述信息。NSError对象的核心属性是错误域(Domain——NSString类型),一个错误域(Domain)特定的错误代码(code)和用户信息(userInfo)都包含在特定的应用程序信息中。

NSError不是一个抽象类,可以直接使用它。还可以创建它的子类,并且重载localizedDescription方法来提供更好滴本地化错误描述信息。

如何使用?

创建对象

- (instancetype)initWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict NS_DESIGNATED_INITIALIZER;

  • (instancetype)errorWithDomain:(NSString *)domain code:(NSInteger)code userInfo:(NSDictionary *)dict;

获得属性

NSInteger _code;    //错误码

NSString *_domain;    //必须为nil

NSDictionary *_userInfo;    // 可以为nil

预定义域

AppKit和Foundation库中主要的错误域

NSString *const NSCocoaErrorDomain;

其他域

NSString *const NSPOSIXErrorDomain;

NSString *const NSOSStatusErrorDomain;

NSString *const NSMachErrorDomain;

 

获取本地错误描述

@property (readonly, copy) NSString *localizedDescription;

@property (readonly, copy) NSString *localizedFailureReason;

@property (readonly, copy) NSString *localizedRecoverySuggestion;

@property (readonly, copy) NSArray *localizedRecoveryOptions;

 

预定义错误Key

/ Key in userInfo. A recommended standard way to embed NSErrors from underlying calls. The value of this key should be an NSError.

FOUNDATION_EXPORT NSString *const NSUnderlyingErrorKey;

 

// Keys in userInfo, for subsystems wishing to provide their error messages up-front.

FOUNDATION_EXPORT NSString *const NSLocalizedDescriptionKey;  // NSString

FOUNDATION_EXPORT NSString *const NSLocalizedFailureReasonErrorKey     ;  // NSString

FOUNDATION_EXPORT NSString *const NSLocalizedRecoverySuggestionErrorKey;  // NSString

FOUNDATION_EXPORT NSString *const NSLocalizedRecoveryOptionsErrorKey   ;  // NSArray of NSStrings

FOUNDATION_EXPORT NSString *const NSRecoveryAttempterErrorKey;  // Instance of a subclass of NSObject that conforms to the NSErrorRecoveryAttempting informal protocol

FOUNDATION_EXPORT NSString *const NSHelpAnchorErrorKey                ;  // NSString containing a help anchor

 

// Other standard keys in userInfo, for various error codes

FOUNDATION_EXPORT NSString *const NSStringEncodingErrorKey ;  // NSNumber containing NSStringEncoding

FOUNDATION_EXPORT NSString *const NSURLErrorKey   ;  // NSURL

FOUNDATION_EXPORT NSString *const NSFilePathErrorKey   ;  // NSString

代码示例:

NSString *fileName = @"fileName";
    
    NSError *error = nil;
    
    NSString *string = [[NSString alloc] initWithContentsOfFile:fileName
                        
                                                       encoding:NSUTF8StringEncoding
                        
                                                          error:&error];
    
    if (error) {
        
        NSLog(@"%@",error.localizedDescription);
        
    }else{
        
        NSLog(@"no error");
        
    }

输出内容:

The file “fileName” couldn’t be opened because there is no such file.

NSDictionary *userInfo = @{NSLocalizedDescriptionKey:@"my custom error desc"};

—————————————————————————————————————————

使用自定义错误

- (void)myError:(NSError **)error

{

NSDictionary *userInfo = @{NSLocalizedDescriptionKey:@"my custom error desc"};

*error = [NSError errorWithDomain:MyCustomErrorDomain code:MyCustomErrorCodeTimeout userInfo:userInfo];

}

这样调用:

[self myError:&error];

if (error) {

NSLog(@"error is %@",error.localizedDescription);

}else{

NSLog(@"no error");

}

—————————————————————————————————————————

在NFNetworking中,有这样的方法

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[manager POST:URLString parameters:newParameters success:^(AFHTTPRequestOperation *operation, id responseObject) {

 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

//失败回调中有NSError的应用,不同的错误信息均通过NSError返回。

}];

其实像我们在编写公用类或框架的时候也应该采用该种方式,将内部不同的错误信息均通过NSError对象返回上层调用者,上层调用者可根据不同的error code进行不同的提示。

 

NSError的好处、优势

通过NSError在软件组件间传递错误信息。相比简单的错误代码来说,使用NSError的主要优势在于NSError对象包含了错误域属性。

NSError对象的使用并不限于操作系统。就像上面提到的,我们还可以创建自己的NSError对象,使用它们在应用内传递错误消息。

域属性根据产生错误代码的库或框架对这些错误代码进行隔离。借助域,框架开发者无须担心覆盖错误代码,因为域属性定义了产生错误的框架。比如,框架 A 与B 都会产生错误代码1,不过这两个错误代码会被每个框架提供的唯一域值进行区分。因此,如果代码需要区分NSError 值,就必须对NSError 对象的code 与domain 属性进行比较。

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
风吹筝
粉丝 0
博文 5
码字总数 1593
作品 0
杭州

暂无相关文章

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部