当其他东西需要 return 值时,指示 ObjC 调用中的错误条件

Indicate an error condition in an ObjC call when return value is needed for something else

当需要 return 值来指示成功或失败时,Objective-C 中指示错误情况的正确方法是什么?

说得更清楚一点,我的return值已经分出来表示方法是否完成了某项任务,在程序流的时候方便代码的可读性。例如,如果您实施:

-(bool) didFinishTest;

你可以继续写:

if ([Student didFinishTest])
{
   // ... do something
}

当然,在执行该方法的过程中可能会出现某种故障。在我的应用程序的 Android 版本中,我只是在实现中发生意外故障时抛出自定义异常。然而,Apple 文档似乎不鼓励在生产代码中使用这种方法。然而,在 Apple 建议使用 NSError 中,他们建议使用 return 值来指示存在故障,并且 NSError 对象传达有关错误的信息。在上面的示例中,这将阻止我使用 return 值来指示学生是否完成了测试。

我当然可以想办法解决这个问题,但我想在这里向社区提出的问题是,是否有最佳或推荐的方法,如果有,那是什么?

在调用的方法中,成功时将 returned NSError 设置为 nil,失败时设置为错误对象。在调用者中测试错误 return 与 nil。 HTH

您可以添加对 NSError 指针的引用,以添加失败的描述。

Apple "Programming With Objective-C" guide says:

Some Cocoa and Cocoa Touch API pass back errors by reference. [...]

- (BOOL)writeToURL:(NSURL *)aURL
       options:(NSDataWritingOptions)mask
         error:(NSError **)errorPtr;

Before you call this method, you’ll need to create a suitable pointer so that you can pass its address:

 NSError *anyError;
 BOOL success = [receivedData writeToURL:someLocalFileURL
                                 options:0
                                   error:&anyError];
 if (!success) {
     NSLog(@"Write failed with error: %@", anyError);
     // present error to user
 }

如果发生错误,writeToURL:... 方法将 return 否,并更新您的 anyError 指针以指向描述问题的错误对象。

When dealing with errors passed by reference, it’s important to test the return value of the method to see whether an error occurred, as shown above. Don’t just test to see whether the error pointer was set to point to an error.