在数组中添加对象会迅速创建重复值

时间:2019-02-07 17:29:02

标签: ios arrays swift duplicates

我有一个自定义对象数组,但是当我向数组中添加项目时,它会创建数组中最后一个项目的重复项。 下面是我的代码,请指出错误在哪里,这个小东西无法解决。

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包含不同的值,也是最后插入的元素。

谢谢

1 个答案:

答案 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)
}

请注意并修复有关永不突变的变量

的警告