标签: nsmergepolicy

CoreData - 有没有一个很好的方法来upsert项目?

只是想知道是否有一个好办法UPSERT在一个项目CoreData db

或者有没有办法让我将CoreData数据库视为一个集合?

我的意思是,如果我将一个项目插入到数据库中,并且如果那里已经存在相同的冗余项目,则数据库会忽略它.有什么办法方便吗?或者我每次插入时都要查询以避免冗余?

core-data upsert ios nsmergepolicy

7
推荐指数
2
解决办法
1476
查看次数

如何防止在 CoreData 中与 Swift 覆盖合并时对多关系 NSManagedObject 重复?

我的 Swift 应用程序从在线 API 以 JSON 形式下载 3 个数据库,然后将 JSON 对象转换为 CoreData 对象,因此该应用程序可以在互联网访问之外运行。

我有一个实体客户端,它与地址类型的实体有 toMany 关系。地址与实体客户端具有一对一的关系。

客户 <-->> 地址

客户端到地址关系具有级联删除规则,地址到客户端关系具有无效删除规则。

客户端对 id 属性有唯一性约束,并且上下文始终使用 NSMergePolicyType.overwriteMergePolicyType。

当实例化一个新的 Client NSManagedObject 时,保存上下文,并找到具有相同 ID 的 Client,新的 Client 会覆盖旧的 Client,但有一个很大的警告 - 由于某种未知的原因,旧的 Address 对象仍然存在,现在链接到新客户。这会在每次重新加载缓存/数据库时生成每个地址的新副本。

我有多个具有像这样的关系和唯一性的实体,它们会遇到相同的结果 - 多个对象实例的重复。

对于像 Address 这样的对象,没有一个属性可以封装容器中所有其他 Address 对象之间的唯一性。它必须是所有属性(地址 1、地址 2、城市、州、邮政编码等)的总和,并根据另一个地址的所有属性的总和检查唯一性。所以我不确定如何通过唯一性约束来实现这一点 - 据我所知,唯一性约束不能用 if 逻辑来扩展。

另一个解决方案是更改策略的合并行为,或创建自定义合并策略,以确保它在用新对象替换之前实际删除旧对象(级联到多对多关系对象)。

我对 CoreData 或 Objective-c 不太熟悉,无法跟踪迄今为止我在该主题上找到的任何内容。

有没有人对如何 A. 扩展唯一性约束功能、B. 定义合并策略行为或 C. 以其他方式防止上述地址对象重复有建议?

编辑:

我怀疑我对唯一性约束的假设是错误的 - 请参阅我关于它的单独问题

core-data unique-constraint swift nsmergepolicy

3
推荐指数
1
解决办法
1333
查看次数