题
如果我从 Cocoa 函数中得到错误代码结果,是否有任何简单的方法可以弄清楚它的含义(除了通过 grep 遍历框架包中的所有 .h 文件)?
解决方案
你应该看看 <Framework/FrameworkErrors.h>
您正在使用的返回错误的方法来自的任何框架的标头。
例如,一个 NSError
在从 Foundation 框架中的方法获得的 Cocoa 域中将有其 code
中描述的属性 <Foundation/FoundationErrors.h>
标头。与 AppKit 类似, <AppKit/AppKitErrors.h>
和核心数据和 <CoreData/CoreDataErrors.h>
.
另外,如果您打印的描述 NSError
在调试器中,它不仅应该包括错误域和代码,还应该包括实际错误代码常量的名称,以便您可以在 API 参考中查找它。
其他提示
Apple 中有关“错误域”和“错误代码”的部分 错误处理编程指南 很好地解决了这个问题。您需要执行以下操作:
记录错误,同时记下 错误域 (一个人类可读/可通过 Google 搜索的字符串,告诉您在哪里查找错误代码定义)和 错误代码 本身(一个整数)
在 Google 上嗅探(或从下面的列表中读取)并找出定义该错误域的错误代码的头文件的名称
在这些头文件中搜索您得到的错误代码。您应该找到错误代码的常量名称(例如
ENOMEM
),并希望还有一个解释性评论(例如/* Cannot allocate memory */
)解释错误的含义。如果没有注释,并且常量名称不言自明,只需用 Google 搜索常量名称,您可能会找到正确的描述。
主要错误域的一些头文件:
NSCocoaErrorDomain
错误代码声明分布在三个头文件中:
<Foundation/FoundationErrors.h>
(通用基金会错误代码)<AppKit/AppKitErrors.h>
(通用 AppKit 错误代码)<CoreData/CoreDataErrors.h>
(核心数据错误代码)
NSURLErrorDomain
查看 NSURLError.h
NSXMLParserErrorDomain
查看NSXMLParser.h
NSMachErrorDomain
查看 /usr/include/mach/kern_return.h
NSPOSIXErrorDomain
查看 /usr/include/sys/errno.h
NSOSStatusErrorDomain
查看
/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/MacErrors.h
另外,Cocoa 的 NSError 旨在向最终用户显示。如果你只是记录它,它应该是可读的。
如果你谈论的是Carbon的OSStatus等,MacErrors.h。
对于 NSError 错误添加一行代码:
NSError *error;
// ... Some code that returns an error
// Get the error as a string
NSString *s = [error localizedDescription];
// Observe the code for yourself or display to the user.