代码之家  ›  专栏  ›  技术社区  ›  John Gallagher

核心数据错误与例外第3部分

  •  0
  • John Gallagher  · 技术社区  · 16 年前

    this one .

    背景

    我遵循了所有的核心数据多线程规则——我有一个持久存储协调器和一个托管对象上下文,每个线程在保存时会合并回主托管对象上下文。

    问题

    当一次运行的线程数大于1时,我会在核心数据存储的save上记录异常:

    NSExceptionHandler has recorded the following exception:
    NSInternalInconsistencyException -- optimistic locking failure
    

    我试过的

    如果我用一些非常简单的代码来替换我的对象创建例程,只生成不相关的条目,那么一切都会很好地工作。

    最初,除了异常之外,我还收到一个save错误,说由于合并失败,核心数据无法保存。

    我阅读了文档,意识到我需要在保存到的托管对象上下文上使用合并策略。我设置了这个 this question 状态,保存错误消失,但异常仍然存在。

    我的问题

    如果我真的需要排除例外,有什么办法吗?

    2 回复  |  直到 9 年前
        1
  •  1
  •   Marcus S. Zarra    16 年前

    您需要捕获该异常,然后打印出与之相关的所有信息,以确定确切的原因。异常在核心数据中非常罕见,绝对不应该被忽略。

    但是,您没有向我们提供足够的信息来帮助您跟踪它,因此第一步是展开该异常并查看发生了什么。

        2
  •  1
  •   Benedict Cohen    16 年前

    你在创造一个新的世界吗 NSManagedObjectContext 为了新的线索?苹果医生 Multi-Threading with Core Data 为核心数据的多线程处理提供指导。它建议:

    创建单独的托管对象 每个线程的上下文并共享 单一持久存储协调器。