Контроллер NSFetchedResultsController делегат didChange - ошибка подтверждения - PullRequest
0 голосов
/ 14 ноября 2018

Я построил табличное представление с FRC для отображения данных из основных данных.Я также реализовал контроллер didChange делегат для просмотра изменений в основных данных:

    func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {

        switch (type) {
        case .insert:
            if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!{
                tableView.insertRows(at: [indexPath!], with: .left)
            }
            break;

        case .update:
            if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!{
                self.tableView.reloadRows(at: [indexPath!], with: .left)
            }
            break;

        case .delete:
            if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!{
                self.tableView.deleteRows(at: [indexPath!], with: .left)
            }
            break;

        case .move:
            if indexPath != nil && (indexPath?.row)! < (controller.fetchedObjects?.count)!{
                print("type.move: shouldn't get in here!")
            }
            break;

        }
    }

при запуске я получил это на консоли:

*** Ошибка подтверждения в - [UITableView _endCellAnimationsWithContext:] CoreData: ошибка: серьезная ошибка приложения.Исключение было получено от делегата NSFetchedResultsController во время вызова -controllerDidChangeContent :.Неверное обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (216), должно быть равно количеству строк, содержащихся в этом разделе до обновления (215), плюс или минус числоиз строк, вставленных или удаленных из этого раздела (0 вставлено, 0 удалено) и плюс или минус количество строк, перемещенных в или из этого раздела (0 перемещено, 0 перемещено).с userInfo (null)

, хотя приложение не аварийно завершает работу - но табличное представление закручено и не показывает дату.

1 Ответ

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

моя ошибка заключалась в том, что при вставке и обновлении я ссылался на indexPath вместо newIndexPath ...

должно быть:

        case .insert:
        if newIndexPath != nil && (newIndexPath?.row)! < (controller.fetchedObjects?.count)!{
            tableView.insertRows(at: [newIndexPath!], with: .left)
        }
        break;
...