Удаление всех данных в объекте Core Data в Swift 3
Есть ли способ сделать пакетное удаление всех данных, хранящихся во всех сущностях в основных данных?
Я где-то читал, что в iOS 9 или 10, что яблоко представило способ делать пакетные удаления, но я не могу найти никакой хорошей информации об этом.
В конечном счете, мне просто нужна функция, которая проходит через сущность и удаляет все данные в ней. Похоже, это должно быть достаточно простым, но документация/учебники для него оказались чрезвычайно трудными для поиска.
Любые мысли?
Edit
Я добавил следующий код в IBAction, прикрепленный к кнопке:
@IBAction func clearAllData(_ sender: AnyObject) {
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "PLProjects")
let request = NSBatchDeleteRequest(fetchRequest: fetch)
//get the data from core data
getPLData()
//reload the table view
tableView.reloadData()
}
Однако это не работает. Если я закрою проект и снова его открою, данные все еще там. Я предполагаю, что это также почему представление таблицы не обновляется, потому что данные фактически не удаляются.
Ответы
Ответ 1
Вы думаете о NSBatchDeleteRequest
, который был добавлен в iOS 9. Создайте его вот так:
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee")
let request = NSBatchDeleteRequest(fetchRequest: fetch)
Вы также можете добавить предикат, если хотите удалить экземпляры, совпадающие с предикатом. Чтобы выполнить запрос:
let result = try managedObjectContext.executeRequest(request)
Обратите внимание, что пакетные запросы не обновляют текущее состояние приложения. Если вы управляете объектами в памяти, на которые будет воздействовать удаление, вам необходимо немедленно их не использовать.
Ответ 2
Чтобы отразить Tom ответ, это то, что я добавил, чтобы иметь полную процедуру:
func deleteAllRecords() {
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "CurrentCourse")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
do {
try context.execute(deleteRequest)
try context.save()
} catch {
print ("There was an error")
}
}