2016-05-27 118 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

谢谢。愚蠢的错误。对我感到羞耻。:-( –

相关问题