在CoreData中保存数组的值时,只保存一个值

问题描述

我有一个数组,我想添加到CoreData数据库中,我做了一个forEach遍历数组然后将数据保存在CoreData中,只保存一个值的问题,下面我写代码,有代码有问题吗?

class AquarisB: NSManagedobject,Identifiable {
    
    @NSManaged public var nombre : String

}



struct Inici: View {
    var body: some View {
        
        
        var data : Array = [nombre: test1,nombre: test2]
        var nuevoAcuari = Aquaris(context: self.contexto)
        
        @Environment(\.managedobjectContext) var contexto
        
        
        data.forEach { (temp) in
            nuevoAcuari.nombre = temp.nombre
        }
        
        do {
            try self.contexto.save()
        } catch let error as NSError {
            print("error al guardar",error.localizedDescription)
        }
    }
}

解决方法

正如我在评论中所说,您需要为数据数组中的每个项目创建一个新实体。这样的东西应该就足够了。

for nombre in data {
    var nuevoAcuari = Aquaris(context: contexto)
    nuevoAcuari.nombre = nombre
}

do {
    try self.contexto.save()
} catch let error as NSError {
    print("error al guardar",error.localizedDescription)
}

托管对象上下文充当便笺簿,每次在其上创建对象时,它都不会保存,直到您对其显式调用 save。如果要添加多个项目,则需要创建它们,然后调用保存。

在您的代码中,您所做的只是更新您创建的对象,然后对其调用 save。您需要为要保存的每个项目创建一个对象。