objective-c - 任何地方记录的消息中可能存在 NSError 吗?

标签 objective-c cocoa error-handling nserror

所有可能由消息引起的 NSError 是否都记录在 cocoa 或 iOS 框架中?

是的,NSErrors 的类型分为不同的域,但我仍然在看 NSURLSession似乎诸如 (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData finishHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler 之类的消息未指定什么可能的 NSError 可能会被抛出。在Apple自己的错误处理编程指南中,它使用NSDocument作为示例,但在引用文档中也没有说明可以抛出哪些错误。

我错过了什么吗?程序员如何提前知道可能发生什么类型的错误?或者程序通常只是捕获所有内容并通过警报将它们返回给用户?

(我为 iOS 编程)

最佳答案

Are all NSErrors that may result from a message ever documented anywhere in the cocoa or iOS frameworks?

NSOSStatusErrorDomain 的存在意味着答案是否定的,因为实际上有数千个 OSStatus 错误代码,但只记录了其中的一小部分。

不过,Apple 提供的其他域中的大多数(如果不是全部)错误都已记录。您应该能够简单地获取错误的本地化描述、本地化故障原因或本地化恢复建议,以获取(理论上)适合向用户显示的错误描述。

… I'm looking at say NSURLSession and it seems like [it] does not specify what possible NSError could be thrown out. And in the Apple's own Error handling programming guide, it uses NSDocument as example, but in the reference docs it doesn't say what errors can be thrown out either.

可能的错误集很少受到限制,而且经常是一个移动的目标。

NSDocument 示例是第一部分的一个很好的示例:您可以从读取和写入方法返回任何错误。尝试读取(例如:损坏/错误的格式、无意义的数据)或写入(例如:无法创建文件;存储空间不足)时出现任何问题,您都会报告为错误。您甚至可以弥补自己的错误,并且从那里返回这些错误是完全有效的。

即使在 NSURLSessionDownloadTask 的情况下,也可能有一些有限的可想象的事情可能会出错,但这只是意味着您将期待与 Apple 工程师相同的一组失败案例。当(不是如果)发生他们没有预料到的事情时,你也不会。

“苹果从未说过会发生这种情况!”这是您的应用程序未正确处理错误的糟糕借口。

“永远”可能不正确:正如我提到的,可能的错误集可能是一个移动目标。这意味着苹果可能会在以后扩展该集合,要么是因为他们忘记了一个(确实发生了),要么是因为他们后来确实添加了其他可能的错误(新代码或只是新处理的案例)。

如果您期望 Apple 完美完整地记录每个方法当前和 future 可能出现的错误,那么您将会感到失望。预期不完美并围绕它制定计划。

如果您收到错误,您需要能够处理任何错误。尽可能地从任何情况中恢复,确保所有可预见的不可恢复的情况都有合理的错误消息(如果还没有),并通过在警报中填充其本地化描述/失败原因/恢复建议来处理其他任何情况。

关于objective-c - 任何地方记录的消息中可能存在 NSError 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19312674/

相关文章:

java - 无法启动模拟器

javascript - xmlHTTP请求错误: "failed"

iphone - 将 UIButton 添加到 MKAnnotationView

iphone - 动画 UIView 比例为零

Cocoa webview windowScriptObject 保持强引用

objective-c - 如何在WebView中显示NSString内容(Cocoa Mac应用程序)

objective-c - 如何将静态库嵌入到 iOS 框架中?

ios - Sprite Kit 中的 SKSpinLockSync 是什么以及如何修复它

cocoa - 捕获 NSTextView 而不是 NSTextField 的 TextDidChange 或 DidEndEditing

python - Foursquare 身份验证 - 'No handlers could be found for logger "foursquare"'