Swift Core Data: неверное обновление при удалении строки - PullRequest
0 голосов
/ 08 мая 2018

Хорошо, я пытаюсь удалить беседу из таблицы в моем приложении чата, и приложение вылетает. Сообщение об ошибке выглядит следующим образом:

CoreData: ошибка: серьезная ошибка приложения. Исключение было поймано во время обработки изменений основных данных. Обычно это ошибка в наблюдатель NSManagedObjectContextObjectsDidChangeNotification. Неверное обновление: недопустимое количество элементов в разделе 0. Количество элементы, содержащиеся в существующем разделе после обновления (0) должны быть равным количеству элементов, содержащихся в этом разделе до обновление (3), плюс или минус количество элементов, вставленных или удаленных из этот раздел (0 вставлено, 1 удалено) и плюс или минус количество элементы перемещены в или из этого раздела (0 перемещены, 0 перемещены). с userInfo (null)

Из сообщения об ошибке цифры "3" - это фактически количество сообщений в моем разговоре. Другими словами, в этом конкретном разговоре всего 3 сообщения. Структура и связь между моим разговором и сообщением следующие:

  1. Отношения между разговором и сообщением - это один-много, т. Е. Один разговор со многими сообщениями
  2. Я установил правило удаления как обнуляющее для получателя "Диалог" и обратное "сообщение", и установил правило удаления как каскад для получателя "Сообщение" и обратный "разговор"

Мой код для моего chatLogViewController:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in

    let selectedConversation = self.activeConversations[indexPath.row]
    let context = CoreDataManager.shared.persistentContainer.viewContext
    context.delete(selectedConversation)

    do {
        try context.save()
        self.activeConversations.remove(at: indexPath.row)
        self.tableView.deleteRows(at: [indexPath], with: .fade)

    } catch let error {
        print(error.localizedDescription)
    }
}

    return [deleteAction]
}

Я не совсем понимаю, почему я получаю это сообщение об ошибке. Разочарование в том, что эта ошибка не появляется постоянно. Это случается иногда, но достаточно часто.

Кто-нибудь может дать совет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...