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

Posted

技术标签:

【中文标题】在CoreData中保存数组的值时,只保存一个值【英文标题】:when saving the values of an array in CoreData, only one value is saved 【发布时间】:2020-12-30 08:26:36 【问题描述】:

我有一个数组要添加到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)
        
    

【问题讨论】:

你没有保存数组,你没有迭代它,也没有更新你的nuevoAcuari 上的nombre 的值。可能您在核心数据中的条目将是数组中的最后一个条目。您将需要为数组中的每个条目创建一个新的Aquaris,而不是尝试多次重新使用同一个。 @andrew 你能说我应该如何实现代码吗? 【参考方案1】:

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

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。

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

【讨论】:

以上是关于在CoreData中保存数组的值时,只保存一个值的主要内容,如果未能解决你的问题,请参考以下文章

函数只保存并打印数组中的一个值。如何解决?

IOS/Objective-C:无法将 CoreData 值保存到 NSArray

如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?

Core Data 只保存最后一项

C#如何在不知道新数组长度的情况下将数组中的值保存到新数组中

在多重映射中,当两个迭代器保存具有映射到不同 Value 的相同键的值时。我们如何才能在地图中找到它们中的哪一个在另一个之前