OSX/Cocoa 的错误代码参考

Posted

技术标签:

【中文标题】OSX/Cocoa 的错误代码参考【英文标题】:Error Code Reference for OSX/Cocoa 【发布时间】:2010-09-07 11:47:09 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

那么可能没有 UIKit 特定的错误域和 UIKit 特定的错误代码。【参考方案2】:

Apple 的Error Handling Programming Guide 中有关“错误域”和“错误代码”的部分很好地解决了这个问题。您需要执行以下操作:

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

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

    在这些头文件中搜索您得到的错误代码。您应该找到错误代码的常量名称(例如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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

对于 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.   

【讨论】:

以上是关于OSX/Cocoa 的错误代码参考的主要内容,如果未能解决你的问题,请参考以下文章

OSX / Cocoa:获取屏幕中docktile图标的绝对位置[重复]

OS X/Cocoa:在透明窗口内的 NSView 上绘图

就像在我的 Mac OSX Cocoa 应用程序中在 Microsoft Word 中一样创建字体菜单

更改没有单独笔尖的“精简模式应用程序”的 OSX/Cocoa 应用程序菜单名称

许可证密钥验证框架(OS X、Cocoa)?

Mac OSX Cocoa App:是不是可以让您的 App 使用 san francisco 字体(用于 Apple Watch 的字体)?