2017-02-26 5 views
0

私はコアデータ属性に入れたいオブジェクトをたくさん持っていますが、これを行う簡単な方法はありますか?このシステムを使ってオブジェクトを作成することは知っていますが、新しいオブジェクトを追加するためには、このシステムを何度も実行する必要があります。多くのオブジェクトを1つのコアデータに入力します

 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

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 
+0

コア・データ・セットアップあなたの中に追加してください、私はかなり、あなたが何を意味するか理解していない、あなたはいくつかのコードを実証することができますか?私はperformBackgrounTaskの前に来たことはありません –

+0

偉大な例の名前は素晴らしい答えです。 –

関連する問題