Rei*_*ner 4 core-data nsmanagedobjectcontext ios
我是 coreData 的新手,我有一个问题:
我的应用程序执行以下 3 个连续的核心数据函数:
let managedContext = persistentContainer.viewContext
deleteAllCDRecords(managedContext: managedContext, in: "CDShoppingItem")
saveManagedContext(managedContext: managedContext)
Run Code Online (Sandbox Code Playgroud)
它们定义(缩写)为:
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
Run Code Online (Sandbox Code Playgroud)
和
private func saveManagedContext(managedContext: NSManagedObjectContext) {
if !managedContext.hasChanges { return }
do {
try managedContext.save()
} catch let error as NSError {
// error handling
}
} // saveManagedContext
Run Code Online (Sandbox Code Playgroud)
问题:
deleteAllCDRecords执行后, managedContext.hasChangesin functionsaveManagedContext 不为 true,因此删除不会保存到持久存储中。
我的问题:
我的代码有什么问题?
批量删除在持久存储本身中进行操作。因此,在这种特殊情况下,您从持久存储中删除实体,然后必须删除内存中的对象。
批量删除比在代码中自行删除核心数据实体运行得更快,因为它们在 SQL 级别的持久存储本身中进行操作。作为此差异的一部分,对持久存储进行的更改不会反映在当前内存中的对象中。
执行批量删除后,删除内存中已从持久存储中删除的所有对象。
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |