我有一个自定义对象数组,但是当我向数组中添加项目时,它会创建数组中最后一个项目的重复项。 下面是我的代码,请指出错误在哪里,这个小东西无法解决。
var tempArr:[AnimalViewModel] = [AnimalViewModel]()
do {
var objAnimal = Animal()
var result = try managedContext.fetch(fetchRequest)
for ds in result as! [NSManagedObject] {
objAnimal.name = (ds.value(forKey: "name")) as! String
objAnimal.type = (ds.value(forKey: “type”)) as! String
Var objAVM = AnimalViewModel(aniModel: objAnimal)
tempArr.append(objAVM)
}
} catch {
print(" Error ")
}
tempArr数组包含所有重复的元素,即使objAnimal包含不同的值,也是最后插入的元素。
谢谢
答案 0 :(得分:1)
首先,永远不要在catch块中打印无意义的文字字符串,例如"Error"
。始终打印error
实例。
Animal
显然是一个类(引用类型)。您正在创建一个实例,并且属性在循环中更新。与往常一样,将使用相同的实例,值将被覆盖,并且您获得result.count
项具有相同内容。
在循环内创建新实例,并将Entity
替换为真实实体名称
var tempArr = [AnimalViewModel]()
do {
let result = try managedContext.fetch(fetchRequest) as! [Entity] // let !
for ds in result {
let objAnimal = Animal() // let !
objAnimal.name = ds.name
objAnimal.type = ds.type
let objAVM = AnimalViewModel(aniModel: objAnimal) // let !
tempArr.append(objAVM)
}
} catch {
print(error)
}
请注意并修复有关永不突变的变量
的警告