[решено] Ошибка при удалении ячейки


#1

Подскажите, пожалуйста, почему может возникать ошибка, при удалении последней ячейки в секции. То есть если удалять сколько угодно - проблем нет, анимация работает, а если в секции осталась одна ячейка, то при удалении вылетает ошибка. Единственное, что помогает, это удаление вот этого:

            if let indexPath = indexPath {
                tableView.deleteRows(at: [indexPath], with: .fade)
            }

Тогда ячейка удаляется, но без анимации, а после этого и исчезает сама секция, по релоадДата.

Подскажите, пожалуйста, как побороть это счастье? :pray:

вот так выглядит ошибка:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 1. The number of rows contained in an existing section after the update (2) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'


#2

я так понимаю, нужно что-то типа этого своять:

        tableView.beginUpdates()
        if tableView.numberOfRows(inSection: section) == 1 {
            tableView.deleteSections(IndexSet(integer: section), with: .fade)
        }
        else {
            if let indexPath = indexPath {
                self.tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.fade)
            }
        }
        tableView.endUpdates()
        tableView.reloadData()

или перекрыть ошибку так:

  if indexPath.section > 0 {

    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .None)

        }

Но хотелось бы анимацию оставить. Помогите :pray:
Вообще странно, что ошибка только при наличие:

tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.fade)


#3

Возможно у вас ошибка не в методах, а в модели данных? Может при удалении последней ячейки у вас возвращается что-то другое (нил например) вместо пустого массива, вот и индекспас не срабатывает. Как вариант, проверьте работу модели данных при 0 ячеек…


#4

Это что-то с секциями связано ((, потому что пока их не было, всё было ок


#5

Всё-таки я думаю, что должен быть какой-то обработчик insert / delete для секций. Это логически неправильно, если для ячеек он есть, а для секций нет. Надо покопаться в документации … о Стив, дай мне сил и терпения … :pray: :joy:


#6

Да, сутки потеряны, но дело было действительно в atSectionIndex … :face_with_symbols_over_mouth:


#7

А можно пожалуйста, как сделать если у меня одна секция func commit editingStyle получается удалить оду строку , когда несколько секций и в каждом разное количество ячеек , тажа функция не работает сразу вылетает…
Насколько я понял у вас тоже так что несколько секций с ячейкам…
Как вы реализовали удаление ?