只是想知道是否有一个好办法UPSERT在一个项目CoreData db?
或者有没有办法让我将CoreData数据库视为一个集合?
我的意思是,如果我将一个项目插入到数据库中,并且如果那里已经存在相同的冗余项目,则数据库会忽略它.有什么办法方便吗?或者我每次插入时都要查询以避免冗余?
我的 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. 以其他方式防止上述地址对象重复有建议?
编辑:
我怀疑我对唯一性约束的假设是错误的 - 请参阅我关于它的单独问题