关于为自己的框架设置错误域,有previous SO post条建议,但是关于设置错误域和自定义错误代码for your own project/app的最佳实践是什么?

例如,假设你正在开发一个包含大量验证的核心数据密集型应用程序,你是应该坚持使用"现成"的核心数据错误代码(例如CoreDataErrors.h中的NSManagedObjectValidationError),还是应该创建自己的MyAppErrors.h,并更具体地定义错误(即MyAppValidationErrorInvalidCombinationOfLimbs

创建一个自定义错误域和一组错误代码可以显著消除代码的歧义,但是维护它的开销是否太大,是否需要担心错误代码编号冲突?还是还有其他问题?

推荐答案

我个人使用反向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将包含更多的信息,比如具体哪些关系是错误的,等等).

Objective-c相关问答推荐

Clang:将 id 之类的类型转换警告提升为 class

Objective C:给定一个Class id,我可以判断这个类是否实现了某个协议吗?还是有一定的 Select 器?

从 float 或 double 实例化 NSDecimalNumber 的正确方法

'if not' 的 Objective-C 预处理器指令

在我的 UIImageView 的子类中没有调用 drawRect

go 掉 UISearchBar 下的 1px 边框

在 UILabel.attributedText *not* 蓝色和 *not* 下划线

NSView 的边界与框架

失go 对 UITextView 的关注时隐藏键盘

arc4random 和 arc4random_uniform 有什么区别?

为什么 NSOrderedSet 不继承自 NSSet?

在 Objective C 中使用 extern

NSMutableArray 按顺序添加对象

滑动删除单元格导致 tableView 标题随单元格移动

NSCharacterSet:如何将_添加到 alphanumericCharacterSet 文本限制?

嵌入自定义容器视图控制器时,内容位于导航栏下方.

如何在 Xcode 7 中启用_BITCODE?

如何判断 NSString 的最后一个字符

如何调整 UIToolBar 左右内边距

UICollectionView:如何检测滚动何时停止