2011-05-05 60 views
2

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

然而,当我尝试在一个实体更新管理对象,应用程序崩溃与以下错误,

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。任何人都知道这是为什么发生?

+0

感谢您的更新!我面临同样的问题,这解决了它。我现在使用'refreshObject'更新对象后保存上下文,并没有更多的冲突出现。 – csch 2015-04-17 18:17:35

回答

0

错误提示您确实有两个单独的上下文。当您有两个或更多上下文写入同一商店时,您只能进行合并。

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

+0

这是我尝试的第一件事(即使我通过单身访问MOC)并没有看到不同的MOC被记录。事实上,我做了一个清理对象,然后运行相同的代码两次。第一次插入对象时一切正常,但第二次更新发生时,应用程序崩溃了相同的错误。 – Gary 2011-05-05 20:19:31