OSX/Cocoa的错误代码参考

17

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

4个回答

23

如果你遇到返回错误的方法,应该查看其所属的框架中的<Framework/FrameworkErrors.h>头文件。

例如,在Foundation框架中调用的方法中获得的Cocoa域中的NSError将在<Foundation/FoundationErrors.h>头文件中描述其code属性。同样的,AppKit和<AppKit/AppKitErrors.h> 以及Core Data和<CoreData/CoreDataErrors.h>都有对应的头文件。

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


那么可能没有一个具有UIKit特定错误代码的UIKit特定错误域。 - Chris Hanson

7
苹果公司的“错误域”和“错误代码”章节在其错误处理编程指南中相当详细地介绍了这个问题。您需要执行以下操作:
  1. 记录错误,注意记录下错误域(一种人类可读/可搜索的字符串,告诉您在哪里查找错误代码定义)和错误代码本身(一个整数)

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

  3. 在这些头文件中搜索您获得的错误代码。您应该会找到一个用于错误代码的常量名称(如ENOMEM),并且希望还有解释性注释(如/* Cannot allocate memory */)解释错误含义。如果没有注释,并且常量名称不是自说明的,请在Google上搜索常量名称,您可能会找到适当的描述。

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

NSCocoaErrorDomain

错误代码声明分布在三个头文件中:

  • <Foundation/FoundationErrors.h> (通用Foundation错误代码)
  • <AppKit/AppKitErrors.h> (通用AppKit错误代码)
  • <CoreData/CoreDataErrors.h> (Core Data错误代码)

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

1
此外,Cocoa的NSError旨在可供最终用户显示。如果您只是记录它,那么它应该是可读的。
如果您正在谈论Carbon的OSStatus等内容,请参考MacErrors.h。

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.   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接