1

是否所有可能由消息导致的 NSErrors 都记录在可可或 iOS 框架中的任何地方?

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

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

(我为 iOS 编程)

4

1 回答 1

2

是否所有可能由消息导致的 NSErrors 都记录在可可或 iOS 框架中的任何地方?

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

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

…我正在查看说 NSURLSession ,似乎 [it] 没有指定可能抛出的 NSError 。在 Apple 自己的错误处理编程指南中,它使用 NSDocument 作为示例,但在参考文档中也没有说明可以抛出哪些错误。

一组可能的错误很少受到约束,而且经常是一个移动的目标。

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

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

“苹果从未说过这会发生!” 是你的应用程序没有正确处理错误的一个糟糕的借口。

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

如果您希望 Apple 能够完美地完整记录每种方法的当前和未来可能出现的错误集,那么您感到失望。期待不完美并围绕它进行计划。

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

于 2013-10-11T23:45:47.607 回答