你知道NSError吗? 你确定你知道吗?

你对NSError了解多少?

文章先不要看,先在心里默默回答下这个问题。待会再和文章对比下,看看是否一样。


NSError是什么?

NSError是系统提供的错误类,它继承于NSObject,用于获取系统错误或者自定义错误。它不同于NSExcetion,异常未捕获则会导致程序崩溃。而NSError只是返回一个错误信息,对外部调用者来说可以随意处理这个错误,仅仅是告诉调用者这个方法发生了错误而已。

NSError对象封装了更为丰富,更易扩展的错误信息,你可以只使用错误代码或者错误描述信息。NSError对象的核心属性是错误域(用一个字符串来表示),一个错误域特定的错误代码和用户信息通常都包含在特定的应用程序信息中。

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


如何使用?

创建对象

获得属性

预定义域

AppKit和Foundation库中主要的错误域

其他域

获取本地错误描述

预定义错误Key

错误码:


代码示例:

1、获取系统方法错误信息

了解C语言的应该都知道,&是取地址的运算符号。

我们可以断点打印下error的相关信息,

 

2、自定义错误信息

首先声明我们的错误域常量,错误域通常用域名反写,当然也可以是任何其他字符串。

然后声明我们的错误代码,即code错误标识, 自定code可以用枚举(最好用负数, 但不是必须的)

自定义错误描述信息

使用自定义错误

这样调用:

3、实际应用场景

在NFNetworking中,有这样的方法

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


NSError的好处、优势

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

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

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

尊重原创内容,转载请注明出处
本文链接地址: https://www.awnlab.com/archives/124

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注