我使用NSFetchedResultsController
设置了NSManagedObjectContext
。我使用这个上下文执行获取。
我还使用相同的NSBatchUpdateRequest
设置NSManagedObjectContext
。我使用相同的NSManagedObjectContext
执行请求。
当我使用NSBatchUpdateRequest
执行请求时,我可以看到我的所有数据都已更新。
如果我重新启动应用,则使用NSFetchedResultsController
进行的任何提取都可以正常运行。
问题是当我没有重新启动应用程序并且我一个接一个地执行这两个操作时,当我从上下文调用方法NSMergeConflict (0x17427a900) for NSManagedObject (0x1740d8d40) with objectID '0xd000000001b40000...
时出现save
错误。
我知道问题来自同一数据的并发更改,但我不知道解决方案是什么?一个可能是通过NSMergePolicy
课程,但我怀疑这是一个解决我问题的干净方法。
我该怎么办?有两种不同的背景? (工作原理)
答案 0 :(得分:4)
当您进行批量更新时,您可以获得结果,无论是什么,更新的行数或更新的对象ID列表。你必须选择最后一个。
从上下文中执行executeRequest
后,您需要获取对象ID列表,遍历所有对象ID以使每个NSManagedObject
进入故障,这要归功于方法objectWithID
上下文对象。如果您不知道Core Data中的Faults对象是什么,here就是解释。
每获得NSManagedObject
,您需要使用其方法refreshObject
刷新上下文。
完成上述操作后,您需要再次执行performFetch
的{{1}}以返回批量更新前的位置。
告诉我,我在某处是否错了。
以下是代码:
fetchedResultsController
修改强>: 以下是两个链接以获得更多解释:
http://code.tutsplus.com/tutorials/ios-8-core-data-and-batch-updates--cms-22164
http://www.bignerdranch.com/blog/new-in-core-data-and-ios-8-batch-updating/