如何在Swift中进行深度复制?

时间:2019-08-11 21:03:37

标签: swift core-data

与复制实体的属性及其关系一样。这是我现在拥有的:

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中制作核心数据实体的深层副本吗?

0 个答案:

没有答案
相关问题