Удаление строки из CoreData - PullRequest
       8

Удаление строки из CoreData

0 голосов
/ 03 ноября 2018

У меня проблемы с удалением элемента из моих Базовых данных, и я посмотрел на множество других примеров и вопросов - все они говорят об удалении NSManagedObject, тогда как я пытаюсь удалить элемент на indexPath.row (что является String).

var itemsArray = [String]()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

Что бы я добавил в следующую функцию?

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if (editingStyle == .delete) {

    }
}

Загрузка элементов в базовые данные

func loadItems() {
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Items")
    request.returnsObjectsAsFaults = false

    do {
        let results = try context.fetch(request)
        if results.count > 0 {
            for result in results as! [NSManagedObject] {
                if let product = result.value(forKey: "product") as? String {
                    self.itemsArray.append(product)
                }
            }
        }
    } catch {
        print("Error")
    }
}

1 Ответ

0 голосов
/ 03 ноября 2018

Чтобы иметь возможность удалить объект, вы должны использовать NSManagedObject в качестве источника данных

var itemsArray = [Items]()

loadItems может быть уменьшено до

func loadItems() throws {
    let request = NSFetchRequest<Items>(entityName: "Items")
    request.returnsObjectsAsFaults = false
    itemsArray = try context.fetch(request)

}

Поместите блок do - catch вокруг вызова loadItems() и напечатайте экземпляр error, а не бессмысленную буквенную строку.

В cellForRow использовать

let item = itemArray[indexPath.row]
let product = item.product

Чтобы удалить элемент, вы должны удалить его из источника данных, затем удалить элемент в контексте и затем сохранить контекст:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
       let objectToDelete = itemArray[indexPath.row]
       itemArray.remove(at: indexPath.row)
       context.delete(objectToDelete)
       // here add code to save the context
       self.tableView.deleteRows(at: [indexPath], with: .fade) // and you have to update the table view
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...