【发布时间】:2018-05-05 21:26:28
【问题描述】:
我正在尝试更新 CoreData 中的实体。以下是我的一些声明。
static var appDelegate = UIApplication.shared.delegate as! AppDelegate
static var context = appDelegate.persistentContainer.viewContext
static var entity = NSEntityDescription.entity(forEntityName: "PData", in: context)
static var newPData = NSManagedObject(entity: entity!, insertInto: context)
我有点确定它们是静态的这一事实并不相关。
PData 是实体的名称(持久数据的缩写)。
稍后,我使用newPData.setValue("foo", forKey: "bar") 设置要保存的值,但是当我实际尝试使用context.save() 保存它们时,我得到NSCocoaErrorDomain Code 133020 "Could not merge changes."
我应该提到,这是在删除 PData 中的现有条目后直接发生的(用新的实体实例替换旧的实体实例)。
我做了一些阅读,发现这个错误的原因是 Swift 处理 CoreData 合并冲突的默认方式是抛出一个错误。我想更改我的 CoreData 设置,以便来自内存的更改覆盖已存储在 CoreData 中的实体中的更改,但我不确定我将如何执行此操作。
Apple 文档显示了许多不同的合并策略选项,但没有显示如何实施它们的示例。我认为我需要使用的是NSMergeByPropertyStoreTrumpMergePolicy,但我不知道如何将所述策略实际设置为合并策略。
【问题讨论】:
-
点赞this
-
@SevySonip 看起来不错 - 我没有特别找到这个特定的帖子,我给我的一位同事发了一封电子邮件,他给了我答案,我已经在下面发布了。