2

我正在寻找开始在我的代码中添加错误捕获,并且我想看看NSError对象自己为我做了什么以及我必须自己添加什么。

查看这个 SO questionApple Docs,看起来NSError所做的只是保留一个数字错误代码、错误的位置和错误的描述。对于所有这三个项目,我必须在我的代码中指定它们。然后,如果我想做一些事情,比如跳到当前正在执行的任何方法的末尾(如果应用程序试图运行它们很可能会导致崩溃),或者显示一个UIAlertView告诉用户有错误,我必须我自己也指定所有这些,对吗?

我有点初学者,所以还有什么我想考虑做的吗?

4

3 回答 3

3

NSError是错误信息的容器,它自己不做任何事情。该类的设计使您的代码的不同部分可以以标准化的方式相互交流错误信息。简单地在一个没有任何作用的方法中设置一个错误NSError**- 调用者有责任检查是否*error是非nil,跳到方法的末尾,显示本地化描述,提示用户执行操作,等等。

但是,NSError它足够灵活,可以让您完成所有这些操作:调用者可以提供几乎任何类型的信息;您可以跟踪恢复尝试,向用户显示本地化消息,或在NSError对象中存储附加信息,并将其返回到调用链的下方。

注意:Cocoa 框架方法一般要求你在使用之前检查直接返回值NSError,而不是检查错误是否为nil. 如果方法指示失败,则错误保证有效,但不保证nil成功,即使您nil事先将其设置为。

于 2012-10-26T15:13:08.727 回答
1

NSError 作为错误的封装提供。这是一个很好的 OO 实践,它允许其他签名对其进行强类型化。这很像 Java 和 C# 中的 Exception 类。它还允许您创建一个指针以传递给以 NSError 作为参数的方法,在方法完成后,您可以检查 NSError 以了解您的应用程序可以处理的条件。

于 2012-10-26T15:08:31.240 回答
1

您可能想考虑发布一些代码来帮助说明您要完成的工作。

您可以做的一件事是,在调用将填充错误对象的方法后,检查错误是否不为零,或评估错误对象的属性。

它可能看起来像:

-(void)someMethod {
    NSError *error;

    [self myMethod:&error];

    if ( error ) {
        // handle the error, display an alert, etc ...
    }
    else {
        // do other stuff when no error occurs
    }
}
于 2012-10-26T15:10:28.663 回答