Nea*_*l L 111 cocoa core-data objective-c nserror
有一篇关于为您自己的框架设置错误域的SO帖子,但是关于为您自己的项目/应用程序设置错误域和自定义错误代码的最佳做法是什么?
例如,假设您正在使用具有大量验证的核心数据密集型应用程序,您是否应该坚持使用"现成的"核心数据错误代码(例如NSManagedObjectValidationError来自CoreDataErrors.h),或者您应该创建自己的错误代码MyAppErrors.h并定义错误更具特异性(即MyAppValidationErrorInvalidCombinationOfLimbs?
创建自定义错误域和错误代码集可能会明显消除代码歧义,但维护过多是否需要担心错误代码编号冲突?或者还有其他问题吗?
Dav*_*ong 150
我个人使用反向DNS样式域.例如:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
Run Code Online (Sandbox Code Playgroud)
domain(@"myproject")的第三部分仅用于区分此项目("My Project")的错误与另一个项目("My Other Project"=> com.davedelong.myotherproject)中的错误.
这是一个简单的方法,以确保我不会用别人的错误域冲突(如果我使用第三方代码),除非开发商故意想惹只是我(我相信这将是非常不可能的. ..).
至于代码编号冲突,不要担心.只要代码在域中是唯一的,您应该没问题.
至于翻译错误,这取决于你.无论你做什么,一定要记录好. 就个人而言,我通常只是传递框架生成的错误,因为他们来找我,因为我不太确定我将处理所有代码并将所有userInfo转换为更具体的项目.框架可能会更改并添加更多代码,或更改现有代码的含义等.它还可以帮助我更具体地确定错误的来源.例如,如果我的StackKit框架在com.stackkit域中生成错误,我知道这是一个框架问题.但是,如果它在中生成错误NSURLErrorDomain,那么我知道它特别来自URL加载机制.
您可以做的是捕获框架生成的错误并将其包装在一个新的错误对象中,该错误对象包含您的域和通用代码,类似于kFrameworkErrorCodeUnknown什么东西,然后将捕获的错误放在userInfo下面NSUnderlyingErrorKey.CoreData做这个有很多(例如,如果你尝试save:了NSManagedObjectContext,但你有关系完整性错误,你会得到一个错误回来,但NSUnderlyingErrorKey会包含更多的信息,比如具体在哪些关系是错误的,等等).
Con*_*or 35
我没有足够的评论来评论,但是对于Dave DeLong接受的答案,使用[[NSBundle mainBundle] bundleIdentifier]而不是代表可能会稍好一些@"com.myName.myProject".这样,如果您更改您的名称或项目名称,它将被准确反映.
如何创建自定义 NSError:
首先创建一个错误信息的字典
NSDictionary *userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown Error - Please try again", nil),
NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Unknown Error - Please try again", nil),
NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Unknown Error - Please try again", nil)
};
NSError *error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier]
code:-58 userInfo:userInfo];
Run Code Online (Sandbox Code Playgroud)
然后将 userInfo 分配给 NSDictionary 并完成。
| 归档时间: |
|
| 查看次数: |
30277 次 |
| 最近记录: |