16

如果我从 Cocoa 函数中得到错误代码结果,是否有任何简单的方法可以弄清楚它的含义(除了通过 grepping 框架包中的所有 .h 文件)?

4

4 回答 4

23

您应该查看<Framework/FrameworkErrors.h>您正在使用的返回错误的方法来自哪个框架的标题。

例如,NSError您从 Foundation 框架中的方法获得的 Cocoa 域中的code属性将在<Foundation/FoundationErrors.h>标头中描述。AppKit 和<AppKit/AppKitErrors.h>Core Data 和<CoreData/CoreDataErrors.h>.

此外,如果您NSError在调试器中打印 的描述,它不仅应包括错误域和代码,还应包括实际错误代码常量的名称,以便您可以在 API 参考中查找它。

于 2008-09-01T21:54:46.823 回答
6

Apple 的错误处理编程指南中关于“错误域”和“错误代码”的部分很好地解决了这个问题。您需要执行以下操作:

  1. 记录错误,同时记下错误域(一个人类可读/可谷歌搜索的字符串,告诉您在哪里查找错误代码定义)和错误代码本身(一个整数)

  2. 在 Google 上四处搜索(或从下面的列表中读取)并找出定义该错误域的错误代码的头文件的名称

  3. 在这些头文件中搜索您得到的错误代码。您应该找到错误代码的常量名称(如),并希望还找到解释错误含义ENOMEM的解释性注释(如)。/* Cannot allocate memory */如果没有注释,并且常量名称不是不言自明的,只需搜索常量名称,您可能会找到正确的描述。

一些主要错误域的头文件:

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
于 2013-10-14T21:32:40.007 回答
1

此外,Cocoa 的 NSError 旨在向最终用户显示。如果你只是记录它,它应该是可读的。

如果你在谈论 Carbon 的 OSStatus 等,MacErrors.h。

于 2008-09-16T12:30:00.607 回答
0

对于 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.   
于 2014-07-18T20:16:51.233 回答