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

use*_*951 8 conflict core-data

NSMergeByPropertyObjectTrumpMergePolicy并且NSOverwriteMergePolicy在一件事情上是一样的.该属性会覆盖商店中的属性.

那么它们之间有什么不同呢?在我可以想到的所有情况下,无论持久性存储中的那个是否已经改变,该属性都会覆盖持久性存储.

还有什么是冲突?

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

如果冲突不仅仅是"数据不同",那么NSOverwriteMergePolicy和之间的区别是NSErrorMergePolicy什么?

在这两种情况下,仅仅数据差异无论如何都不是冲突,因此不存在冲突.

Tom*_*ton 12

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

不,如果是这样的话会没用多少,不是吗?

还有什么是冲突?

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

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

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

在这两种情况下,仅仅数据差异无论如何都不是冲突,因此不存在冲突.

肯定存在冲突.这是一种非常常见的情况.