核心数据与单个MOC和用于核心数据的主线程产生合并冲突

时间:2011-05-05 13:38:18

标签: core-data merge conflict nsmanagedobjectcontext

我正在使用单个NSManagedObjectContext的核心数据,并且正在对主线程上的核心数据执行所有操作。错误描述中给出的新旧行是相同的,我希望有人可以解释为什么会发生合并冲突。将合并策略设置为覆盖会导致应用程序在模拟器中运行到高CPU并且无响应。

但是,当我尝试更新一个实体中的托管对象时,应用程序崩溃并出现以下错误

NSMergeConflict (0x7144390) for NSManagedObject (0x7225db0) with objectID '0x721c0a0 <x-coredata://94349DC2-C441-4102-9C65-60737E940135/Locations/p1>' with oldVersion = 2 and newVersion = 3 and 
old cached row = {\n    AccountInfo = \"0x721bae0 <x-coredata://94349DC2-C441-4102-9C65-60737E940135/Account/p1>\";\n    City = \"<null>\";\n    Country = \"Russian Federation\";\n    EntryStatusId = \"<null>\";\n    ExitStatusId = \"<null>\";\n    IsCorporateLocation = 1;\n    IsVisible = 1;\n    Latitude = 50;\n    LocationId = 10003;\n    Longitude = 40;\n    Name = \"Test Location\";\n    Radius = 304;\n    State = \"Province of Voronezh\";\n    Street = \"<null>\";\n    Units = METER;\n    Zip = \"<null>\";\n} and 
new database row = {\n    AccountInfo = \"0x7144560 <x-coredata://94349DC2-C441-4102-9C65-60737E940135/Account/p1>\";\n    City = \"<null>\";\n    Country = \"Russian Federation\";\n    EntryStatusId = \"<null>\";\n    ExitStatusId = \"<null>\";\n    IsCorporateLocation = 1;\n    IsVisible = 1;\n    Latitude = 50;\n    LocationId = 10003;\n    Longitude = 40;\n    Name = \"Test Location\";\n    Radius = 304;\n    State = \"Province of Voronezh\";\n    Street = \"<null>\";\n    Units = METER;\n    Zip = \"<null>\";\n}

更新:如果我在更新每个对象后保存MOC,则会发生错误,但如果我更新所有对象然后保存MOC,则会发生错误。谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

该错误表明您确实有两个单独的上下文。只有两个或更多上下文写入同一个商店时,才会获得合并。

我建议在每次保存之前记录上下文,在执行保存的每个地方都要确保只有一个活动上下文。

答案 1 :(得分:-1)

可以让Core Data自动处理此冲突,而不是抛出异常。请参阅此帖子:http://pauloliveira.net/tech/core-data-merging-conflicts