Как сохранить массив модели для основных данных NSmanagedobject? - PullRequest
0 голосов
/ 23 мая 2019

Я работаю со списком объектов, которые добавляются в базовые данные NSManagedobject каждый раз по отдельности - это прекрасно работает.

Проблема, с которой я сталкиваюсь при добавлении функции удаления, мне нужно удалить текущий сохраненный массив в основных данных и сохранить новый полный массив, а не добавлять их по одному. Вот код, который я использую, который не работает, и я надеюсь, что кто-то может указать, что я делаю неправильно -


func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            customers.remove(at: indexPath.row)
            let customersPersistancy = CustomerModel(context: context)
            for customer in customers {
                customersPersistancy.name = customer.name
                customersPersistancy.age = Int16(customer.age)
                customersPersistancy.surname = customer.surname
                customersPersistancy.region = customer.region
                customersPersistancy.gender = customer.gender
            }
            //print(customersPersistancy)
            saveData()
            tableView.reloadData()
        }
    }

func saveData(){
        do {
            try context.save()
            print("data saved successfully")
        } catch {
            print("error saving context, \(error.localizedDescription)")
        }
    }

Это не только не удаляет желаемую строку, но фактически дублирует строку несколько раз, что я не понимаю, почему.

1 Ответ

1 голос
/ 23 мая 2019

Ваш код не имеет смысла.Метод tableView(_:commit:forRowAt:) пропускает текущий путь индекса, и вам нужно

  • Удалить элемент из массива источника данных
  • Удалить элемент в контексте управляемого объекта
  • Удалить строку
  • Сохранить контекст

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        let item = customers.remove(at: indexPath.row)
        context.delete(item)  
        tableView.deleteRows(at: [indexPath], with: .fade)         
        saveData()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...