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

Posted

技术标签:

【中文标题】一次性将多个对象输入核心数据【英文标题】:inputing many objects into core data in one go 【发布时间】:2017-02-26 12:25:56 【问题描述】:

我有很多对象想一次性放入核心数据属性中,有没有一种快速的方法?我知道你使用这个系统来创建对象,但你必须一次又一次地运行它来添加新对象。

       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")

有没有快速的解决方案?一种我可以一次性将许多名称添加到名称属性中的方法。

【问题讨论】:

【参考方案1】:

如果您想使用NSPersistentContainer,您应该将viewContext 视为只读。如果你想插入核心数据,你应该使用performBackgroundTask,它为你提供了一个插入的上下文。在该块中插入所有内容并在最后调用 save 一次。这将避免多次保存核心数据。

 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

【讨论】:

对不起,我不太明白你的意思,你能用一些代码演示一下吗?我以前从未遇到过 performBackgrounTask 一个很好的答案中的很好的例子名称。

以上是关于一次性将多个对象输入核心数据的主要内容,如果未能解决你的问题,请参考以下文章

一次将多个操作添加到核心 - 数据关系

字节输入流读取字节数据和字节输入流一次读取多个字节

如果在循环中插入对象,应该多久调用一次 NSManagedObjectContext 保存?

将对象保存到核心数据中

UITableView 中核心数据对象的多个副本

在 Core Data 中获取多个 objectID?