一次性将许多对象输入核心数据

时间:2017-02-26 12:25:56

标签: database object core-data swift3 attributes

我有很多想要一次性放入核心数据属性的对象,有这么快的方法吗?我知道您使用此系统来创建对象,但您必须反复运行它以添加新对象。

       let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let context = appDelegate.persistentContainer.viewContext

   let newName = NSEntityDescription.insertNewObject(forEntityName: "StoredNames", into: context)

    newName.setValue("Jim", forKey: "name")

有一个快速的解决方案吗?我可以一次性将多个名称添加到name属性中。

1 个答案:

答案 0 :(得分:1)

如果您想使用NSPersistentContainer,则应将viewContext视为只读。如果要插入核心数据,则应使用performBackgroundTask,这将为您提供插入的上下文。在该块中插入所有内容并在结束时调用一次。这将避免多次保存到核心数据。

 let lotsOfStuffToInsert = ["Eugenio Barefoot",
        "Shaquita Lettieri",
        "Tami Hollingworth",
        "Marion Pruitt",
        "Hubert Pigeon",
        "Stewart Christon",
        "Clarence Murry",
        "Roni Bohnsack",
        "Mozell Oberman",
        "Mellissa Dowd",
        "Sybil Swinton"]
self.persistentContainer.performBackgroundTask { (managedObjectContext) in
    for name in lotsOfStuffToInsert{
        let newName = NSEntityDescription.insertNewObject(forEntityName: "StoredNames", into: managedObjectContext)
        newName.setValue(name, forKey: "name")
    }
    do {
        try managedObjectContext.save()
    } catch {

    }
}

还要确保添加核心数据设置

container.viewContext.automaticallyMergesChangesFromParent = true