我希望开始将错误捕获到我的代码中,我想看看NSError
个对象对我自己做了什么以及我必须自己添加什么。
查看this SO question和the Apple Docs,看起来所有NSError
都会保留一个数字错误代码,错误的位置以及错误的描述。对于所有这三个项目,我必须在我的代码中指定它们。然后,如果我想做一些事情,比如跳到当前正在执行的任何方法的末尾(如果应用程序试图运行它们,很可能会导致崩溃),或者显示UIAlertView
告诉用户有一个错误,我必须自己指定所有这些,对吗?
我是一个初学者,所以还有什么我想考虑做的吗?
答案 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
}
}