具体来说,我想知道是否交换了.mergeByPropertyObjectTrumpMergePolicyType
和.mergeByPropertyStoreTrumpMergePolicyType
的定义。
来自Apple (强调我的):
mergeByPropertyObjectTrumpMergePolicyType
:一种策略,用于合并冲突......由单个属性合并,外部更改胜过内存中的更改。
我的实验:
在新的iOS项目中:
main
和background
。每个上下文的合并策略都设置为.mergeByPropertyObjectTrumpMergePolicyType
(与上面的描述相同)。Document
实体w / name
/ String
类型的NSString
属性。documentA
。{/ li>的单个实例Document
main
上下文中,我提取documentA
并将其name
设置为" main_document"。我不保存。background
上下文中,我抓取documentA
并将其name
设置为" background_document"。background
上下文。documentA.name
版本(使用外部sqlite客户端获取)现在是" background_document",正如预期的那样。main
上下文。这是我遇到意外行为的地方,至少根据我对文档的阅读 - 数据库的documentA.name
版本现在是" main_document"。
如果外部更改应该超过内存中的更改,不应该将数据库的值设置为" background_document"?
编辑:如果我将每个上下文的合并政策切换为.mergeByPropertyStoreTrumpMergePolicyType
,我会得到.mergeByPropertyObjectTrumpMergePolicyType
的描述所期望的行为 - 保存{{ 1}}上下文会丢弃main
的更改。
答案 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