好吧我有一个非常棘手的问题,我花了几天的时间去了解并知道我不知道如何解决它。防止NSManagedObjectContextDidSaveNotification事件重叠
我有一个CoreData数据库从不同上下文的不同线程更新。我的问题是,有时NSManagedObjectContextDidSaveNotification事件重叠并创建导致崩溃的基础的损坏。这里有一个例子:
Thread Main NSFetchResultsController
Update database
Save database NSManagedObjectContextDidSaveNotification1
merge delegate process 1
process 1 done
Update database
Save database NSManagedObjectContextDidSaveNotification2
merge delegate process 2
process 2 done
Update database
Save database NSManagedObjectContextDidSaveNotification3
merge delegate process 3
Update database
Save database NSManagedObjectContextDidSaveNotification4
merge
process 3 done
delegate process 4
CRASH
process 4 done
在这个伪代码示例过程1和过程2工作没有问题 但有时候主线程接收重叠的更新事件和 你process4开始process3完成之前读取数据库。
有没有官方的方式来处理? CoreData是否为这种情况提供了一个解决方案 ,还是我必须使用NSLock?
感谢
你可以发布处理合并通知的代码部分吗?没有这一点,我不认为有更多的人能够推断出来。正如我在回答中所说的,上下文锁定持久性商店协调员以序列化访问,这应该可以防止这些类型的问题。 – paulbailey 2011-02-03 18:08:02