Core data NSManagedObject中的冲突是什么,以及';有些合并策略之间有什么不同?

Core data NSManagedObject中的冲突是什么,以及';有些合并策略之间有什么不同?,core-data,conflict,Core Data,Conflict,nsmergebypropertyobjecttrompmergepolicy和NSOverwriteMergePolicy在一点上是相同的。属性将覆盖存储中的属性 那么他们之间有什么不同呢?在我能想到的所有情况下,无论持久性存储中的属性是否已更改,该属性都会覆盖持久性存储 冲突又是什么 我认为冲突仅仅意味着数据不同。这是否意味着核心数据最初设计为一旦写入数据就无法更新 如果冲突不仅仅是“数据不同”,那么NSOverwriteMergePolicy和NSErrorMergePolicy之间有什么

nsmergebypropertyobjecttrompmergepolicy
NSOverwriteMergePolicy
在一点上是相同的。属性将覆盖存储中的属性

那么他们之间有什么不同呢?在我能想到的所有情况下,无论持久性存储中的属性是否已更改,该属性都会覆盖持久性存储

冲突又是什么

我认为冲突仅仅意味着数据不同。这是否意味着核心数据最初设计为一旦写入数据就无法更新

如果冲突不仅仅是“数据不同”,那么
NSOverwriteMergePolicy
NSErrorMergePolicy
之间有什么区别

在这两种情况下,仅仅数据差异并不是冲突,因此不可能存在冲突

这是否意味着核心数据最初设计为一旦写入数据就无法更新

不,如果是这样的话就没什么用了,是吗

冲突又是什么

在核心数据中,当多个托管对象上下文(MOC)访问同一数据存储时,可能会发生冲突。这在多线程应用程序中很常见。每个MOC可以独立于其他MOC保存更改。但您希望在所有线程中保持数据的一致视图,因此可以通知更改已保存在一个MOC上,并将这些更改合并到不同的上下文中。这样可以保持上下文同步

但是,如果您尝试将更改合并到MOC中,而它对同一数据有不同的未保存更改,该怎么办?就像,两个MOC在同一个实例上更改了相同的属性,并将其更改为不同的值。这是发生冲突的时候。如果尝试合并更改,结果取决于主运行中心的合并策略。默认情况下,它使用
NSErrorMergePolicy
,这意味着合并失败,您的代码需要以某种方式整理和解决冲突。有几个内置的合并策略可将不同的自动解决方案应用于冲突

四种内置的分辨率方案优先考虑磁盘上的更改或内存中的更改。它们在处理非冲突内存更改方面也有所不同。例如,
NSMergeByPropertyStoreTranpMergePolicy
更新内存中任何冲突的更改,以匹配来自其他MOC的更改,但保留不冲突的更改
NSRollbackMergePolicy
的不同之处在于,它完全丢弃内存中的更改,即使这些更改与来自其他MOC的新更改不冲突。如果没有任何内置方案是正确的,您也可以创建自己的合并策略

在这两种情况下,仅仅数据差异并不是冲突,因此不可能存在冲突


肯定会有冲突。这是一种非常常见的情况。

所以这里的关键是,仅仅数据差异并不是冲突。同一对象上未保存的数据差异会导致冲突。对,如果某个托管对象上下文中的某个属性没有更改,则来自不同MOC的更改不是冲突,而是新信息。