当需要返回值来指示成功或失败时,Objective-C中指示错误情况的正确方法是什么?
为了更清楚,我的返回值已经被分开以指示该方法是否完成某个任务,并且当涉及程序流时它对于代码可读性是很方便的。例如,如果您实现:
-(bool) didFinishTest;
你可以继续写:
if ([Student didFinishTest])
{
// ... do something
}
但是当然在执行该方法时可能会发生某种故障。在我的应用程序的Android版本中,我只是在实现中发生意外故障时抛出自定义异常。然而,Apple文档似乎不鼓励在生产代码中使用它。然而,在Apple建议使用NSError
时,他们建议使用返回值来指示是否存在失败,NSError
对象传达有关错误的信息。在上面的示例中,这将阻止我使用返回值来指示学生是否完成了测试。
我当然可以找到解决这个问题的方法,但我在这里向社区提出的问题是,是否有最佳或推荐的方式,如果是这样的话,那么它是什么?
答案 0 :(得分:4)
您可以添加对NSError
指针的引用,以添加失败描述。
Apple "Programming With Objective-C" guide says:
一些Cocoa和Cocoa Touch API通过引用传回错误。 [...]
- (BOOL)writeToURL:(NSURL *)aURL options:(NSDataWritingOptions)mask error:(NSError **)errorPtr;
在调用此方法之前,您需要创建一个合适的指针,以便传递其地址:
NSError *anyError; BOOL success = [receivedData writeToURL:someLocalFileURL options:0 error:&anyError]; if (!success) { NSLog(@"Write failed with error: %@", anyError); // present error to user }
如果发生错误,writeToURL:...方法将返回NO,并更新anyError指针以指向描述问题的错误对象。
在处理通过引用传递的错误时,测试很重要 方法的返回值,以查看是否发生错误,如 如上所示。不要只是测试是否设置了错误指针 指出错误。
答案 1 :(得分:1)
在被调用的方法中,成功时将返回的NSError
设置为nil
,并在失败时设置为错误对象。在调用者测试中,错误返回nil
。 HTH