gpt4 book ai didi

core-data - NSManagedObject 中的冲突是什么?某些合并策略之间有什么不同?

转载 作者:行者123 更新时间:2023-12-02 22:26:51 29 4
gpt4 key购买 nike

NSMergeByPropertyObjectTrumpMergePolicyNSOverwriteMergePolicy 有一件事是相同的。该属性会覆盖商店中的属性。

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

什么是冲突?

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

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

在这两种情况下,单纯的数据差异无论如何都不会产生冲突,因此不可能存在冲突。

最佳答案

Does this mean that core data is originally designed that once data is written it cannot be updated?

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

Also what is conflict?

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

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

四种内置解决方案优先考虑磁盘上的更改或内存中的更改。它们的不同之处还在于如何处理不冲突的内存中更改。例如,NSMergeByPropertyStoreTrumpMergePolicy 会更新内存中的所有冲突更改以匹配其他 MOC 的更改,但会保留不冲突的更改。 NRollbackMergePolicy 的不同之处在于它完全丢弃内存中的更改,即使它们与其他 MOC 的新更改不冲突。如果所有内置方案都不正确,您还可以创建自己的合并策略。

In both cases, mere data difference is not a conflict anyway and hence there can't be a conflict.

肯定会发生冲突。这是一个非常常见的场景。

关于core-data - NSManagedObject 中的冲突是什么?某些合并策略之间有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14515847/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com