По сообщению о сбое, которое вы предоставили, кажется, что сбой происходит, когда есть вставка, но в табличном представлении все еще есть старое количество строк.
Как написано в документации Apple, рекомендуется выполнить серию изменений табличного представления, вложенных между вызовами методов tableView.beginUpdates()
и tableView.endUpdates()
.
Это позволит табличному представлению синхронизировать данные, вызывая
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func numberOfSections(in tableView: UITableView) -> Int
методы и т. Д.
Таким образом, вы можете добавить tableView.beginUpdates(), tableView.endUpdates()
вызовы в реализации метода NSFetchedResultsControllerDelegate
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.beginUpdates()
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
tableView.endUpdates()
}
Также вы неправильно обрабатываете дело .move
. tableView.moveRow(at: oldIndexPath, to: newIndexPath)
должен быть вызван вместо