我个人使用反向 DNS 样式的域。例如:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
域的第三部分 ( @"myproject"
) 仅用于区分此项目中的错误 ( "My Project"
) 和另一个项目中的错误 ( "My Other Project"
=> com.davedelong.myotherproject
)。
这是确保我不会与其他任何人的错误域冲突的简单方法(如果我使用的是 3rd 方代码),除非该开发人员故意试图只与我混淆(我认为这极不可能。 ..)。
至于代码编号冲突,不用担心。只要代码在域中是唯一的,就应该没问题。
至于翻译错误,这取决于你。不管你做什么,确保你把它记录好。 就个人而言,我通常只是将框架生成的错误传递给我,因为我不太确定我是否会处理所有代码并将所有 userInfo 转换为更具体到我的项目的内容。框架可以更改和添加更多代码,或者更改现有代码的含义等。它还可以帮助我更具体地确定错误的来源。例如,如果我的StackKit框架在域中生成错误com.stackkit
,我知道这是一个框架问题。但是,如果它在 中产生错误NSURLErrorDomain
,那么我知道它专门来自 URL 加载机制。
您可以做的是捕获框架生成的错误并将其包装在一个新的错误对象中,该对象具有您的域和通用代码之类的kFrameworkErrorCodeUnknown
东西,然后将捕获的错误userInfo
放在NSUnderlyingErrorKey
. CoreData 经常这样做(例如,如果您尝试save:
使用NSManagedObjectContext
,但您有关系完整性错误,您将收到一个错误,但NSUnderlyingErrorKey
将包含更多信息,例如具体哪些关系是错误的等)。