好的,我有一个非常棘手的问题,我花了几天时间来理解并且知道我不确定如何解决它。
我有一个从具有不同上下文的不同线程更新的 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
在这个伪代码示例中,process1 和 process2 可以正常工作,但有时主线程会收到重叠更新事件,并且您的 process4 在 process3 完成之前就开始读取数据库。
有官方的方法来处理吗?CoreData 是否为这种情况提供了解决方案,还是我必须使用 NSLock ?
谢谢