Проведите пальцем, чтобы удалить строки с несколькими разделами в табличном представлении? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть табличное представление с двумя разделами

Я добавил пролистывание для удаления строки

, но приложение cra sh из-за ошибки выберите текущий indexPath

Я пробовал два разных способа, но ничего из этого не работает

//the code
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let contextItem = UIContextualAction(style: .destructive, title: "Delete") {  (contextualAction, view, boolValue) in
        switch indexPath.section{
        case 0:
            //1 i tried this
            self.tableView.deleteRows(at: [indexPath], with: .automatic)
        case 1:
            //2 and i tried this
            self.tableView.deleteRows(at: [IndexPath(row: indexPath.row, section: 1)], with: .automatic)
        default:break
        }

        boolValue(true)
    }
    let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])
    return swipeActions
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

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

1 Ответ

2 голосов
/ 27 февраля 2020

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

Это говорит о том, что вы должны сделать. Помните, что при удалении данных вам нужно, чтобы ваш DATASOURCE был равен числу строк и счетчиков после метода deleteRows или deleteSections.

Что означает Вы манипулируете своим массивом источника данных перед вызовом этих методов. А при использовании нескольких разделов не забывайте тщательно обращаться к источнику данных с помощью section и row, а также при удалении и вставке данных.

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

        let contextItem = UIContextualAction(style: .destructive, title: "Delete") {  (contextualAction, view, boolValue) in

            let section = indexPath.section
            let row = indexPath.row

            self.data[section].remove(at: row)
            self.tableView.deleteRows(at: [indexPath], with: .automatic)

            boolValue(true)
        }

        let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])


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