为什么在应用程序重启或我两次执行NSBatchDeleteRequest之前不删除条目? [英] Why entries are not deleted until app is restarted or I execute my NSBatchDeleteRequest twice?
本文介绍了为什么在应用程序重启或我两次执行NSBatchDeleteRequest之前不删除条目?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在阅读删除/重置核心数据中的所有条目?。
如果执行以下步骤,则会得到意外的结果:
- 调用下面的代码
- 然后在模拟器中查询实体,我将获得一个实体!!!
- 如果我调用
clearCoreDataStore
再次(或重新启动),只有这样才能从核心数据中检索该值
我想念什么?
func clearCoreDataStore(){
让实体= dataManager.persistentContainer.managedObjectModel.entities
用于实体实体{
let fetchRequest = NSFetchRequest< NSFetchRequestResult>(entityName:entity.name!) )
}捕获{
print(error)
}
}
dataManager.saveContext()
}
解决方案
从持久性存储中删除的对象也可能处于内存对象上下文中。如果是这样,则必须先更新该内存上下文以反映删除。可以在此处找到完整的讨论。 p>
简而言之...
deleteRequest.resultType = NSBatchDeleteRequestResultType.resultTypeObjectIDs
let result =尝试使用context.execute(deleteRequest)作为吗? NSBatchDeleteResult
让objectIDArray = result?.result as? [NSManagedObjectID]
让更改= [NSDeletedObjectsKey:objectIDArray]
NSManagedObjectContext.mergeChanges(fromRemoteContextSave:更改为[context])
I'm reading Delete/Reset all entries in Core Data?.
If I follow the steps below, I get an unexpected result:
- Call the code below
- Then query an entity in the simulator, I will get an entity back!!!
- If I call
clearCoreDataStore
again (or do a restart), only then the value won't be retrieved from core-data
What am I missing?
func clearCoreDataStore() {
let entities = dataManager.persistentContainer.managedObjectModel.entities
for entity in entities {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entity.name!)
let deleteReqest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try context.execute(deleteReqest)
} catch {
print(error)
}
}
dataManager.saveContext()
}
解决方案
The objects being deleted from the persistent store are probably also in an in-memory object context. If so, that memory context must first be updated to reflect the deletions. A thorough discussion can be found here.
In a nutshell...
deleteRequest.resultType = NSBatchDeleteRequestResultType.resultTypeObjectIDs
let result = try context.execute(deleteRequest) as? NSBatchDeleteResult
let objectIDArray = result?.result as? [NSManagedObjectID]
let changes = [NSDeletedObjectsKey : objectIDArray]
NSManagedObjectContext.mergeChanges(fromRemoteContextSave: changes, into: [context])
这篇关于为什么在应用程序重启或我两次执行NSBatchDeleteRequest之前不删除条目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文