Почему записи не удаляются до тех пор, пока приложение не будет перезапущено или я не выполню свой NSBatchDeleteRequest дважды? - PullRequest
0 голосов
/ 18 декабря 2018

Я читаю Удалить / Сбросить все записи в Базовых данных? .

Если я выполню следующие действия, я получу неожиданный результат:

  1. Позвоните по указанному ниже коду
  2. Затем запросите объект в симуляторе, я получусущность обратно !!!
  3. Если я вызову clearCoreDataStore снова (или перезапущу), только тогда значение не будет извлечено из данных ядра

Что яотсутствует?

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()
}

1 Ответ

0 голосов
/ 18 декабря 2018

Объекты, удаляемые из постоянного хранилища, вероятно, также находятся в контексте объекта в памяти.Если это так, этот контекст памяти должен сначала быть обновлен для отражения удалений.Подробное обсуждение можно найти здесь .

В двух словах ...

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])
...