我该如何处理API中的错误?

时间:2010-01-30 22:36:14

标签: objective-c cocoa

我正在编写一个包含一些核心基础Web功能的API,它可以返回许多可能的错误条件。我正在努力决定处理API使用者应该处理的错误条件的最佳方法(例如网络超时,接收意外结果,格式错误的XML等)。我提出了3种不同的型号,但不确定使用哪种型号:

如果方法takeAction的对象没有返回任何值,我应该通过以下方法处理方法中的错误:

  1. 将方法写为- (BOOL)takeAction:(NSError **)error,以便使用者知道方法成功或失败,并可以检查错误对象以确定原因,

  2. 将方法写为- (BOOL)takeAction,以便消费者再次知道方法是成功还是失败,然后可以调用- (NSError *)getLastError来确定方法失败的原因,或

  3. 将其写为- (void)takeAction并发布通知,以便消费者可以订阅通知并在通知的userInfo字典中传递NSError对象?

  4. 哪个更好?

1 个答案:

答案 0 :(得分:6)

我会使用方法编号1.这是Apple在其API中常用的功能,例如保存文件等。此方法的好处是能够快速查看是否通过(通过返回布尔值) ,并立即访问该错误。这与数字2大致相同,但如果需要,您现在可以拥有多个错误对象(而不仅仅是单个“getLastError”)。当可能存在多个连续调用的容易出错的方法时,这会在追踪特定错误时更清楚。