2016-05-27 156 views
0

我想在coredata中快速插入數據。 Iam使用以下代碼將批量數據一次插入到數據庫表中。但它總是插入單行並不斷更新表中的行。Coredata總是更新行,而不是在swift中插入新行

任何人都可以請幫我解決這個問題。

func insertIntoTestClass(testClassArray : [DBTestClass]) 
    { 
     let managedObject = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

    let table1 = NSEntityDescription.insertNewObjectForEntityForName("testClass", inManagedObjectContext: managedObject) as! testClass 

    for i in 0..<checklistConfiguration.count 
    { 
     let insertArray = checklistConfiguration[i] 

     table1.test1 = insertArray.test1! 
     table1.test2 = insertArray.test2! 
     table1.test3 = insertArray.test3! 
     table1.test4 = insertArray.test4! 
    } 

    do{ 
      try managedObject.save() 
     } 
     catch 
     { 
      let returnError = error as NSError 
      print("\(returnError)") 
     } 
    } 

回答

1

從我可以在你的代碼中看到,你是不是創造而是要更新的循環前右創建的唯一一個的屬性您testClass對象的新實例。

您應該在循環內移動table1的創建,以便可以在循環的每次迭代中創建新實例。

爲了提高效率,您還應該在循環後保存您的託管對象上下文。

func insertIntoTestClass(testClassArray : [DBTestClass]) 
{ 
    let managedObject = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

    for i in 0..<checklistConfiguration.count 
    { 
     let table1 = NSEntityDescription.insertNewObjectForEntityForName("testClass", inManagedObjectContext: managedObject) as! testClass 
    let insertArray = checklistConfiguration[i] 

     table1.test1 = insertArray.test1! 
     table1.test2 = insertArray.test2! 
     table1.test3 = insertArray.test3! 
     table1.test4 = insertArray.test4! 
    } 

    do{ 
     try managedObject.save() 
    } 
    catch 
    { 
     let returnError = error as NSError 
     print("\(returnError)") 
    } 
    } 
} 
+0

謝謝。愚蠢的錯誤。對我感到羞恥。:-( –

相關問題