可能来自任何地方记录的消息的 NSError?
Posted
技术标签:
【中文标题】可能来自任何地方记录的消息的 NSError?【英文标题】:Possible NSError from a message documented anywhere? 【发布时间】:2013-10-11 07:33:50 【问题描述】:是否所有可能由消息导致的 NSErrors 都记录在可可或 ios 框架的任何地方?
是的,NSErrors 的类型被划分为不同的域,但我仍在查看 NSURLSession ,并且似乎 (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler
之类的消息没有指定可能抛出的 NSError 。在 Apple 自己的错误处理编程指南中,它使用了NSDocument 作为示例,但在参考文档中也没有说明可以抛出哪些错误。
我错过了什么吗?程序员如何提前知道可能发生的错误类型?还是程序通常只是捕获所有内容并通过警报将它们返回给用户?
(我为 iOS 编程)
【问题讨论】:
【参考方案1】:是否所有可能由消息导致的 NSErrors 都记录在可可或 iOS 框架的任何地方?
NSOSStatusErrorDomain
的存在意味着答案是否定的,因为实际上有成千上万个 OSStatus
错误代码,而其中只有一小部分被记录在案。
不过,Apple 提供的其他域中的大多数(如果不是全部)错误都已记录在案。您应该能够简单地获取错误的本地化描述、本地化失败原因或本地化恢复建议,以获取(理论上)适合向用户显示的错误描述。
...我正在查看说 NSURLSession ,似乎 [it] 没有指定可能抛出的 NSError 。并且在苹果自己的错误处理编程指南中,它以 NSDocument 为例,但在参考文档中也没有说明可以抛出哪些错误。
这组可能的错误很少受到限制,而且通常是一个移动的目标。
NSDocument 示例是第一部分的一个很好的示例:您可以从 read 和 write 方法返回任何错误。在尝试读取(例如:损坏/错误的格式、无意义的数据)或写入(例如:无法创建文件;存储空间不足)时出现任何问题,您将报告为错误。您甚至可以自己编造错误,这些错误完全可以从那里返回。
即使在 NSURLSessionDownloadTask 的情况下,也可能有一些有限的可想象的事情可能出错,但这只是意味着您会期待与 Apple 工程师相同的失败案例。当(不是如果)他们没有预料到的事情发生时,你也不会发生。
“Apple 从未说过这会发生!”是你的应用程序没有正确处理错误的一个糟糕的借口。
而且“从不”可能不是真的:正如我所提到的,这组可能的错误可能是一个移动的目标。这意味着 Apple 可能会在以后扩展该集合,要么是因为他们忘记了一个(它确实发生了),要么是因为他们后来确实添加了其他可能的错误(新代码或只是新处理的案例)。
如果您希望 Apple 能够完美地完整记录每个方法的当前和未来可能出现的错误集,那么您会感到失望。期待不完美并围绕它制定计划。
如果您收到错误,您需要能够处理 ANY 错误。从任何可以恢复的情况中恢复,确保所有可预见的不可恢复的情况都有合理的错误消息(如果还没有的话),并通过在警报中填充其本地化描述/失败原因/恢复建议来处理其他任何事情。
【讨论】:
以上是关于可能来自任何地方记录的消息的 NSError?的主要内容,如果未能解决你的问题,请参考以下文章