核心数据错误与异常第3部分

时间:2010-04-16 13:38:07

标签: cocoa multithreading core-data merge

我的问题类似于this one

背景

我正在使用NSOperations在核心数据存储中创建大量对象,以加快速度。

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

问题

当一次运行的线程数超过1时,我会在保存核心数据存储时记录异常:

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

我尝试过什么

我创建新实体的代码非常复杂 - 它使与其他实体有关系的实体可以在一个单独的线程中创建。

如果我用一些非常简单的代码替换我的对象创建例程,只是创建不相关的条目,一切都很完美。

最初,除了例外,我收到一个保存错误,说由于合并失败导致核心数据无法保存。

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

我的问题

我是否需要担心这些例外情况?如果我确实需要摆脱异常,有关我如何做的任何想法?

2 个答案:

答案 0 :(得分:1)

可可的异常表明发生了一些非常糟糕的事情,最好尽快退出。通常,Cocoa使用返回值和输入参数来传达错误条件。

您是否为新主题创建了新的NSManagedObjectContext? Apple doc Multi-Threading with Core Data提供了使用Core Data进行多线程处理的指南。它建议:

  

创建单独的托管对象   每个线程的上下文并共享一个   单一持久性商店协调员。

答案 1 :(得分:1)

您需要捕获该异常,然后打印出与其相关的所有信息以确定确切原因。 Core Data中的例外非常罕见,绝对不应该被忽略。

但是你没有给我们足够的信息来帮助你追踪它,所以第一步是展开那个例外,看看发生了什么。

相关问题