我个人使用反向DNS样式域。例如:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
域(@"myproject"
)的第三部分仅用于区分该项目("My Project"
)中的错误与另一个项目("My Other Project"
=> com.davedelong.myotherproject
)中的错误。
这是确保我不会与任何其他人的错误域发生冲突的简单方法(如果我使用的是第三方代码),除非开发人员有意试图只与我打交道(我相信这种情况不太可能发生)。 ..)。
至于代码编号冲突,不必担心。只要代码在域中是唯一的,就可以了。
至于翻译错误,这取决于您。无论您做什么,都要确保记录正确。 就我个人而言,我通常只是将框架生成的错误传递给我,因为我永远不确定我会处理所有代码并将所有userInfo转换为我的项目所特有的内容。这些框架可以更改和添加更多代码,或更改现有代码的含义等。这也有助于我更具体地确定错误的出处。例如,如果我的StackKit框架在com.stackkit
域中生成错误,那么我知道这是框架问题。但是,如果它在中生成错误NSURLErrorDomain
,那么我知道它特别来自URL加载机制。
您可以执行的操作是捕获框架生成的错误,并将其包装在具有您的域和通用代码(如kFrameworkErrorCodeUnknown
或之类)的新错误对象中,然后将捕获的错误放在userInfo
中NSUnderlyingErrorKey
。CoreData会做很多事情(例如,如果您尝试save:
使用NSManagedObjectContext
,但是遇到关系完整性错误,则会返回一个错误,但是NSUnderlyingErrorKey
它将包含更多信息,例如明确指出哪些关系是错误的,等等)。