Сбой SwipeCellKit при попытке удалить

Здравствуйте, я использую SwipeCellKit для своего UITableView. Я хочу сделать удаление, когда проведите по ячейке. Вот как я обрабатываю часть удаления. self.deleteLeave() вызывает веб-службу и удаляет выбранную запись о выходе на стороне сервера. Затем, если он успешно удален на стороне сервера, я хочу удалить этот объект из текущего массива и обновить свой UITableView. Но моя проблема заключается в том, что когда я прокручиваю и нажимаю кнопку удаления или перетаскиваю ее в какой-то степени, приложение падает, выдавая исключение.

Ошибка

Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (1), должно быть равно количеству строк, содержащихся в этом раздел до обновления (1), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставленных, 1 удаленных) и плюс или минус количество строк, перемещенных в этот раздел или из него (0 перемещенных, 0 перемещенных вне).'

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
    guard orientation == .right else { return nil }

    let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
        // handle action by updating model with deletion
        self.com.showProgress()
        let dict=self.arrayPendings[indexPath.row] as! [String:Any]
        if let reid=dict["RequestId"] as? Int
        {
            self.selectedReqID=String(reid)
        }
        self.deleteLeave(){ (status) in

            if(status)
            {

                let delete = SwipeAction(style: .destructive, title: nil) { action, indexPath in

                    self.com.removeProgress()
                     self.arrayPendings.remove(at: indexPath.row)
                   self.tblPendingLeaves.beginUpdates()
                    //self.tblPendingLeaves.insertRows(at: [IndexPath(row: 0, section: 1)], with: .automatic)
                    self.tblPendingLeaves.deleteRows(at: [indexPath], with: .fade)
                    action.fulfill(with: .delete)
                    self.tblPendingLeaves.endUpdates()
                }




            }
        }

    }

    // customize the action appearance
    deleteAction.image = UIImage(named: "Delete")

    return [deleteAction]
}

person user1960169    schedule 14.06.2017    source источник
comment
У меня такая же проблема. Вы исправили это?   -  person Codey    schedule 01.11.2017


Ответы (1)


У меня такая же проблема. Когда я вызываю удаление, он падает и показывает мне ту же ошибку.

Что я хочу сказать: удалите данные из tableView, затем удалите те же данные из myDataSource (например: удалите данные из массива). Это обработает ваш случай, но не обновит таблицу. (Если вы закроете и снова откроете проект, он удалит его из табличного представления).

Поэтому проверьте связи между вашими данными и вашей таблицей.

person Mohammed Ali Khaled    schedule 12.12.2018