与复制实体的属性及其关系一样。这是我现在拥有的:
extension NSManagedObject {
func makeCopy(copyRelations: Bool, context: NSManagedObjectContext) -> NSManagedObject? {
let entity = self.entity
let copy = NSManagedObject(entity: entity, insertInto: context)
for (attrKey, _) in copy.entity.attributesByName {
copy.setValue(value(forKey: attrKey), forKey: attrKey)
}
if copyRelations {
let relations = copy.entity.relationshipsByName
for (relKey, relValue) in relations {
if relValue.isToMany {
let sourceSet = mutableSetValue(forKey: relKey)
let clonedSet = copy.mutableSetValue(forKey: relKey)
let enumerator = sourceSet.objectEnumerator()
while let relatedObject = enumerator.nextObject() {
let clonedRelatedObject = (relatedObject as! NSManagedObject).makeCopy(copyRelations: false, context: context)
clonedSet.add(clonedRelatedObject!)
}
} else {
copy.setValue(value(forKey: relKey), forKey: relKey)
}
}
}
return copy
}
}
这里的主要问题是,它似乎并没有复制关系-尽管它也以一些意外的方式失败了-简而言之,我知道这不是正确的方法,但是在任何内容上都找不到任何资源我应该做。
任何人都知道如何在Swift中制作核心数据实体的深层副本吗?