我有A
has many
的实体B
。 B
belongs to
A
。
当我从网络加载数据时,因为我读过执行 upsert 操作,核心数据是不可能的,或者不是它应该处理的方式,我去了删除/插入方式
当我尝试删除所有A
时,我会收到Code=133020
NSMergeConflict
。这是有道理的,因为:1)属于B
的{{1}}实体最终会在哪里,2)我不想要删除A
在B
中。我真的只想更新delete cascade
。
话虽如此,很明显删除/更新不是要走的路(或者至少不是我这样做的方式)。那么处理这个问题的正确方法是什么?
答案 0 :(得分:2)
是的,删除更新还需要您跟踪多对多关系对象,并将它们重新分配给新对象。因为您还必须重新分配所有其他属性,这似乎比检查对象是否已存在要多得多。
我确定您的网络服务有一些独特的属性,例如idNumber。您可以使用它来首先进行查找。
let filteredAObjects = allAObjects.filter { $0.idNumber == idNumberFromWebService }
let objectToUpdate = filteredAObjects.count == 0 ?
NSEntityDescription.insertNewObjectForEntityWithName("A",
inManagedObjectContext: moc) as! A :
filteredAObjects.first