NSManagedObjectContext混淆

0xS*_*ina 7 cocoa-touch core-data objective-c nsmanagedobjectcontext ios

我正在学习CoreData.显然,你所包含的主要类之一是NSManagedObjectContext.我不清楚这个的确切作用.从我读过的文章中,您似乎可以拥有多个NSManagedObjectContexts.这是否意味着NSManagedObjectContext基本上是后端的副本?

当存在多个不同的副本时,如何将其解析为一致的后端?

所以,基本上有两个问题:

NSManagedContext是后端数据库的副本吗?

和...

例如,假设我在上下文A中进行了更改,并在上下文B中进行了一些其他更改.然后我先调用保存在A上,然后是B?B会占上风吗?

谢谢

Joe*_*Joe 11

NSManagedObjectContext不是后端数据库的副本.该文档描述了它作为一个便笺

NSManagedObjectContext的实例表示应用程序中的单个"对象空间"或便笺簿.它的主要职责是管理托管对象的集合.这些对象形成一组相关的模型对象,表示一个或多个持久性存储的内部一致视图.单个托管对象实例存在于一个且仅一个上下文中,但对象的多个副本可以存在于不同的上下文中.因此,对象唯一的范围限定在特定的上下文中.

NSManagedObjectContext只是一个以事务方式更改托管对象的临时位置.当您对上下文中的对象进行更改时,它不会影响后端数据库,直到您保存上下文,并且如您所知,您可以拥有多个上下文,您可以对其进行更改,这对于并发非常重要.

对于问题2,谁占优势的答案将取决于您为上下文设置的合并策略以及最后一个将被称为B的合并策略.以下是可以设置的合并策略,这将影响要保存的第二个上下文.

NSErrorMergePolicyType
指定在存在任何合并冲突时导致保存失败的策略.

NSMergeByPropertyStoreTrumpMergePolicyType
指定合并持久性存储的对象版本与当前内存中版本之间的冲突的策略,优先考虑外部更改.

NSMergeByPropertyObjectTrumpMergePolicyType
指定合并持久性存储的对象版本与当前内存中版本之间的冲突的策略,优先考虑内存中的更改.

NSOverwriteMergePolicyType
指定一个策略,该策略在持久存储中覆盖冲突中已更改对象的状态.

NSRollbackMergePolicyType
指定丢弃冲突对象的内存中状态更改的策略.