Coredata 总是更新行而不是快速插入新行

Posted

技术标签:

【中文标题】Coredata 总是更新行而不是快速插入新行【英文标题】:Coredata always updating the row instead of inserting a new row in swift 【发布时间】:2016-05-27 05:40:23 【问题描述】:

我想快速将数据插入 coredata 中。我正在使用以下代码一次将批量数据插入数据库表中。但它总是插入单行并不断更新表中的行。

谁能帮我解决这个问题。

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

【讨论】:

谢谢。愚蠢的错误。真丢人。:-(

以上是关于Coredata 总是更新行而不是快速插入新行的主要内容,如果未能解决你的问题,请参考以下文章

Oracle操纵数据库表

Spring Boot 创建新行而不是更新

TableView:是不是可以在不重新加载 tableview 或部分的情况下删除现有行并插入新行?

向红移表添加行而不是替换表

PHP中的SQL插入两行而不是一行

MyBatis oracle 插入新行总是返回错误的主 id 值