TL;DR version:是否有关于 -[NSManagedObjectContext save:]
可能失败的可能原因的明确列表?我正在查看 CoreDataErrors.h
,但不清楚哪些键与 NSDetailedErrorsKey
相关。
背景:我正在维护一个结合 Swift 和 Objective-C 编写的交付应用程序。它使用 JSQCoreDataKit
。其他人最初编写了代码。
我们遇到了无法重现的生产崩溃。我们可以从堆栈跟踪中得知,它在 NSManagedObjectContext
保存失败后的错误处理程序中崩溃,EXC_BAD_ACCESS
试图将 NSError
记录到控制台.保存失败发生在子上下文中,我们知道当时正在修改的模型类。
因此我们可以判断保存失败,但我们没有关于保存失败原因的详细信息。
我们想从保存失败的原因开始追溯,希望能重现崩溃,以测试任何可能的修复。
崩溃实际上是保存失败的副作用。所以虽然我们要修复崩溃,但我们还需要找出保存失败的原因。
对于 95% 的用户,保存过程没有问题。
该模型有一些非可选字段,数据来自从服务器响应解析的 JSON。在这个阶段,我们没有理由怀疑服务器向我们发送了错误数据。
有谁知道我们可以解决的保存失败的可能原因的最终列表,消除选项?
到目前为止,我知道:
- 验证失败,例如缺少所需的值,或模型中指定的最大/最小值之外的值。
- 可能存在保存冲突(参见
NSPersistentStoreSaveConflictsErrorKey
)。但不清楚是否可以在从子上下文保存到父上下文时使用它。
最佳答案
应该永远没有错误的-save:
失败。每次我看到这种情况时,都是我代码中某处的错误。
您能否通过显示错误位置周围的代码来更新问题?
保存失败的可能是:
- 合并失败(最常见)
- 验证失败(不太常见)
NSPersistentStore
中没有定义存储- A
nil
NSManagedObjectContext
(这将呈现您描述的情况)
除了最后一个之外的所有这些都会产生一个错误对象来询问。
关于ios - NSManagedObjectContext 保存可能失败的可能原因的最终列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37340019/