在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?
C#如何在不知道新数组长度的情况下将数组中的值保存到新数组中
在多重映射中,当两个迭代器保存具有映射到不同 Value 的相同键的值时。我们如何才能在地图中找到它们中的哪一个在另一个之前