Подтвердить что ты не робот

Удаление всех данных в объекте 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()
}

Однако это не работает. Если я закрою проект и снова его открою, данные все еще там. Я предполагаю, что это также почему представление таблицы не обновляется, потому что данные фактически не удаляются.

4b9b3361

Ответ 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")
    }
}