我是coreData的新手,但我遇到了问题:
我的应用程序执行以下3个连续的核心数据功能:
let managedContext = persistentContainer.viewContext
deleteAllCDRecords(managedContext: managedContext, in: "CDShoppingItem")
saveManagedContext(managedContext: managedContext)
它们的定义(简称)为:
private func deleteAllCDRecords(managedContext: NSManagedObjectContext, in entity: String) {
let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: entity)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
do {
try managedContext.execute(deleteRequest)
} catch let error as NSError {
// error handling
}
} // deleteAllCDRecords
和
private func saveManagedContext(managedContext: NSManagedObjectContext) {
if !managedContext.hasChanges { return }
do {
try managedContext.save()
} catch let error as NSError {
// error handling
}
} // saveManagedContext
问题:
执行deleteAllCDRecords
后,函数managedContext.hasChanges
中的saveManagedContext
不正确,因此删除操作不会保存到持久性存储中。
我的问题:
我的代码有什么问题?
答案 0 :(得分:3)
批处理删除操作在持久性存储本身中进行。因此,在这种特殊情况下,您需要从持久性存储中删除实体,然后必须删除内存中的对象。
批量删除比您自己删除Core Data实体运行得更快 在代码中使用,因为它们在持久性存储本身中进行操作, SQL级别。作为这种差异的一部分,对 持久性存储未反映在当前的对象中 在内存中。
执行批量删除后,删除内存中的所有对象 已从永久性存储中删除的文件。