Неверное обновление: недопустимое количество строк в разделе 0, количество строк, содержащихся в существующем разделе после обновления - PullRequest
0 голосов
/ 01 марта 2019

Я получаю эту ошибку, когда я смахиваю и удаляю UITableCell

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

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let delete = deleteAction(at: indexPath)
    tableView.reloadData()
    print(listOfCoins)
    print(listOfCoins.count)
    return UISwipeActionsConfiguration(actions: [delete])
}

func deleteAction(at indexPath: IndexPath) -> UIContextualAction {
    let action = UIContextualAction(style: .destructive, title: "Delete") { (action, view, nil) in
        self.listOfCoins.remove(at: indexPath.row)
       self.tableView.deleteRows(at: [indexPath], with: .automatic)
        self.tableView.reloadData()
        }
    action.title = "Delete"
    action.backgroundColor = .red
    return action
}

Я пытался удалить "self.tableView.deleteRows"который позволяет приложению запускаться и удаляет indexPath из моего источника, но я не знаю, почему ячейка не исчезает при последующем вызове tableView.reloadData ().

enter image description here

1 Ответ

0 голосов
/ 01 марта 2019

Вам нужно всего лишь

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

Так удалите это

let delete = deleteAction(at: indexPath)
tableView.reloadData() // remove this line

И

self.tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.reloadData() // remove this line

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let delete = deleteAction(at: indexPath) 
    print(listOfCoins)
    print(listOfCoins.count)
    return UISwipeActionsConfiguration(actions: [delete])
}

func deleteAction(at indexPath: IndexPath) -> UIContextualAction {
    let action = UIContextualAction(style: .destructive, title: "Delete") { (action, view, nil) in
        self.listOfCoins.remove(at: indexPath.row)
        self.tableView.deleteRows(at: [indexPath], with: .automatic) 
    }
    action.title = "Delete"
    action.backgroundColor = .red
    return action
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...