ios - 为什么在重新启动应用程序或执行两次 NSBatchDeleteRequest 之前不会删除条目?
问题描述
我正在阅读删除/重置核心数据中的所有条目?.
如果我按照以下步骤操作,我会得到意想不到的结果:
- 调用下面的代码
- 然后在模拟器中查询一个实体,我就取回一个实体!!!
- 如果我
clearCoreDataStore
再次调用(或重新启动),则不会从 core-data 中检索该值
我错过了什么?
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()
}
解决方案
从持久存储中删除的对象可能也在内存对象上下文中。如果是这样,则必须首先更新该内存上下文以反映删除。可以在此处找到详尽的讨论。
简而言之...
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])
推荐阅读
- java - 如何在内存中提取zip文件
- watchkit - 如何以编程方式在 Apple Watch 上设置屏幕亮度
- python - 尽管创建附件和上传附件 API 成功,但上传的文件在 azure devops repos 分支中仍然不可见
- google-api - Google 自定义搜索引擎的全局注释限制是如何实施的?
- php - Laravel 中的收藏夹功能问题
- highcharts - 柱形图 Highcharts 中的相同索引
- reactjs - 如何强制标签在 safari 和 firefox 中工作
- java - Handle Response Kotlin Retrofit
- radius - peach-3.1.124-win-x64-release 中缺少 RawEthernetPublisher?
- javascript - 无法绑定到“highlight”,因为它不是“code”的已知属性