我个人使用反向DNS风格的域名.例如:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
The third part of the domain (@"myproject"
) is just used to differentiate the errors from this project ("My Project"
) from errors in another project ("My Other Project"
=> com.davedelong.myotherproject
).
这是一种简单的方法,可以确保我不会与其他任何人的错误域发生冲突(如果我使用第三方代码),除非该开发人员故意试图搞乱justMe(我认为这是极不可能的…).
至于代码编号冲突,不用担心.只要代码是唯一的within a domain,你就应该没事.
至于翻译错误,这取决于你.无论你做什么,一定要做好记录.Personally,我通常只是在框架生成的错误出现时传递给他们,因为我从来都不确定我会处理所有的代码,并将所有的用户信息转换成更特定于我的项目的东西.这些框架可以更改和添加更多代码,或者更改现有代码的含义,等等.它还可以帮助我更具体地确定错误的来源.例如,如果我的StackKit框架在com.stackkit
域中生成错误,我知道这是一个框架问题.然而,如果它在NSURLErrorDomain
中生成错误,那么我知道它具体来自URL加载机制.
您要做的是捕获框架生成的错误,并将其包装在一个新的错误对象中,该对象包含您的域和一个通用代码,比如kFrameworkErrorCodeUnknown
之类的,然后将捕获的错误放在userInfo
中的NSUnderlyingErrorKey
下.CoreData经常这样做(例如,如果你try save:
和NSManagedObjectContext
,但你有关系完整性错误,你会得到一个错误,但NSUnderlyingErrorKey
将包含更多的信息,比如具体哪些关系是错误的,等等).