我想在swift中的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)")
}
}
答案 0 :(得分: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)")
}
}
}