NSError本身做了什么,如果有的话?

时间:2012-10-26 15:02:12

标签: objective-c nserror

我希望开始将错误捕获到我的代码中,我想看看NSError个对象对我自己做了什么以及我必须自己添加什么。

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可能希望发布一些代码来帮助说明您要完成的任务。

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

它可能看起来像:

-(void)someMethod {
    NSError *error;

    [self myMethod:&error];

    if ( error ) {
        // handle the error, display an alert, etc ...
    }
    else {
        // do other stuff when no error occurs
    }
}