Core data 为什么NSManagedObject ChangedValue即使在子MOC中保存更改后仍返回所有修改的属性和关系?
我的设置是一个主moc,带有一个持久存储协调器和一个SQLite持久存储。 我正在尝试从服务器异步(并且可能并发)检索数据,将其解析为CoreData对象,然后将这些新对象保存到持久性存储中,并使它们在主moc中可用 所以我尝试了两种方法:Core data 为什么NSManagedObject ChangedValue即使在子MOC中保存更改后仍返回所有修改的属性和关系?,core-data,ios7,nsmanagedobjectcontext,Core Data,Ios7,Nsmanagedobjectcontext,我的设置是一个主moc,带有一个持久存储协调器和一个SQLite持久存储。 我正在尝试从服务器异步(并且可能并发)检索数据,将其解析为CoreData对象,然后将这些新对象保存到持久性存储中,并使它们在主moc中可用 所以我尝试了两种方法: 每次从服务器获取时,我都会在GCD块(具有正常优先级的并发全局队列)中执行此操作,在该块中,我使用NSConfinementConcurrencyType创建一个新上下文,该上下文与主moc共享现有的存储协调器。解析完JSON并拥有新的托管对象后,我保存这个
NSConfinementConcurrencyType
创建一个新上下文,该上下文与主moc共享现有的存储协调器。解析完JSON并拥有新的托管对象后,我保存这个“本地”上下文,它将NSManagedObjectContextDidSaveNotification
发送到主上下文,然后主上下文进行合并NSPrivateQueueConcurrencyType
创建一个子上下文。此上下文将主上下文作为父上下文,但没有存储协调器。然后我在子上下文上调用-performBlock:
,将JSON解析为CoreData并告诉子上下文保存,这反过来会触发主上下文合并-savedChanges:
(在主上下文合并之后)都不会返回任何值,这是我所期望的
对于第二种方法,我不会让异常断点停在任何地方(这似乎很好),但是。。。当主上下文合并后正确的数据位于正确的对象中时,调用-changedValues
返回子上下文中填充的所有值(属性和/或关系)。这是我没有预料到的,因为理论上,我保存了,保存应该被推到主上下文,主上下文合并了
所以我很困惑
我需要-changedvalue:
仅返回在主上下文保存后更改的值,因为我使用这些值来确定我的应用程序已更改了mo的状态,并且需要将新状态推回服务器
我非常感谢任何方法1或方法2的帮助/提示。子上下文将保存到其父上下文中。也就是说,一旦子级保存了其更改,这些更改将显示在父级中,并且在父级中它们被标记为已更改,因为父级仍然需要更改这些更改
我通常不鼓励使用父子上下文设置,因为它们有很多缺点。有关更多信息,请参见。子上下文将保存到其父上下文中。也就是说,一旦子级保存了其更改,这些更改将显示在父级中,并且在父级中它们被标记为已更改,因为父级仍然需要更改这些更改 我通常不鼓励使用父子上下文设置,因为它们有很多缺点。更多信息,请参阅中的“使用多个上下文”一章