NSMergePolicyType的文档是错误的,还是我误解了描述?

时间:2018-01-30 19:53:08

标签: ios swift core-data

具体来说,我想知道是否交换了.mergeByPropertyObjectTrumpMergePolicyType.mergeByPropertyStoreTrumpMergePolicyType的定义。

来自Apple (强调我的):

  

mergeByPropertyObjectTrumpMergePolicyType:一种策略,用于合并冲突......由单个属性合并,外部更改胜过内存中的更改

我的实验:

在新的iOS项目中:

  1. 我创建了两个共享持久性商店协调员的上下文 - mainbackground。每个上下文的合并策略都设置为.mergeByPropertyObjectTrumpMergePolicyType(与上面的描述相同)。
  2. 在模型中,我定义了一个Document实体w / name / String类型的NSString属性。
  3. 我创建并保存documentA。{/ li>的单个实例Document
  4. main上下文中,我提取documentA并将其name设置为" main_document"。我不保存。
  5. background上下文中,我抓取documentA并将其name设置为" background_document"。
  6. 我保存了background上下文。
  7. 数据库的documentA.name版本(使用外部sqlite客户端获取)现在是" background_document",正如预期的那样。
  8. 我保存了main上下文。
  9. 这是我遇到意外行为的地方,至少根据我对文档的阅读 - 数据库的documentA.name版本现在是" main_document"。

    如果外部更改应该超过内存中的更改,不应该将数据库的值设置为" background_document"?

    编辑:如果我将每个上下文的合并政策切换为.mergeByPropertyStoreTrumpMergePolicyType,我会得到.mergeByPropertyObjectTrumpMergePolicyType的描述所期望的行为 - 保存{{ 1}}上下文会丢弃main的更改。

1 个答案:

答案 0 :(得分:0)

是的,你是对的。

它们在框架标题中是正确的。

// This singleton policy merges conflicts between the persistent store's version of the object and the current in memory version. The merge occurs by individual property. For properties which have been changed in both the external source and in memory, the external changes trump the in memory ones.
@available(iOS 3.0, *)
public var NSMergeByPropertyStoreTrumpMergePolicy: AnyObject

// This singleton policy merges conflicts between the persistent store's version of the object and the current in memory version. The merge occurs by individual property. For properties which have been changed in both the external source and in memory, the in memory changes trump the external ones.
@available(iOS 3.0, *)
public var NSMergeByPropertyObjectTrumpMergePolicy: AnyObject