为什么在应用程序重启或我两次执行NSBatchDeleteRequest之前不删除条目? [英] Why entries are not deleted until app is restarted or I execute my NSBatchDeleteRequest twice?

查看:92
本文介绍了为什么在应用程序重启或我两次执行NSBatchDeleteRequest之前不删除条目?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读删除/重置核心数据中的所有条目?



如果执行以下步骤,则会得到意外的结果:


  1. 调用下面的代码

  2. 然后在模拟器中查询实体,我将获得一个实体!!!

  3. 如果我调用 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:

  1. Call the code below
  2. Then query an entity in the simulator, I will get an entity back!!!
  3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆