ios - NSManagedObjectContext 保存可能失败的可能原因的最终列表

标签 ios swift core-data

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/

相关文章:

ios - Swift JSONSerialization 作为 NSDictionary 无法获取内部的值

ios - Swift 2.0 .contextMenu 从核心数据中多次删除

iphone - iOS - 处理数据模型更改的正确方法是什么?

ios - 核心数据初始化

iphone - 为什么我的 UIActivityIndi​​catorView 不在屏幕中央?

ios - 如何在 iOS 中设置 HLS 流的视频质量?

ios - 应用程序终止时如何获取用户的当前位置

ios - 添加照片,并重新加载嵌入式照片容器 View Controller

swift - getBoundingBox Size 有时会崩溃

ios - "Fatal error: unexpectedly found nil while unwrapping an Optional value"- 将图像发布到 FaceBook