将数组保存为核心数据中的数据的正确方法是什么?

时间:2016-01-29 15:09:13

标签: ios arrays swift core-data

作为标题,我有一个包含多个对象的数组,我希望将它们存储在核心数据中(我知道我们不能将数组保存到核心数据中,因此我将代码分解为json [0] [i] [" ID"]。int格式),也许你读完我的代码后会更清楚

let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext
    let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject

    socket.on("reply") {data, ack in
        let json = JSON(data)
        print("database replied")
        print(json[0].count)

        for var i=0; i<json[0].count; ++i{
            newUser.setValue(json[0][i]["ID"].int, forKey: "patientID")
            newUser.setValue(json[0][i]["Name"].string, forKey: "patientName")
            newUser.setValue(json[0][i]["Mileage"].double, forKey: "patientMileAge")
            do{
                try context.save()
            }catch{
                print("Could not save data")
            }
        }
    }

这就是我的数据 data

麻烦来了,我只得到了[ID:4,姓名:&#39;悬挂&#39;,里程:&#39; 0.23&#39;]结果,前2个阵列已被替换

为什么我不能像我预期的那样保存它们?

3 个答案:

答案 0 :(得分:2)

let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject

应该在循环内部,因为否则您创建一个对象然后重复更新它并保存更改(因此旧值被覆盖)

答案 1 :(得分:1)

因为您没有添加3个条目,所以您只需更新一个条目。

你需要搬家

    let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject
在你的for循环中

答案 2 :(得分:1)

将这行代码移到你的循环中:

let newUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject

这应该有效,如果没有,请写信给我