Так что у меня сбой приложения каждый раз, когда я пытаюсь удалить последнюю ячейку раздела. .Приложение iOS вылетает после удаления последней ячейки в секции
Ex, если моя секция имеет 10 строк, я могу удалить их без каких-либо проблем, но последний выдает следующее сообщение об ошибке:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (1) must be equal to the number of sections contained in the table view before the update (3), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'
Я искал здесь и нашел несколько способов исправить это проблема, но я попробовал их все и не мог устранить эту проблему, она все равно вылетает и выдает ту же ошибку.
Соответствующие части моего кода идет, как следует:
override func numberOfSections(in tableView: UITableView) -> Int {
if (main_arr.count > 0 && sub_arr.count > 0) {
self.numberOfSections = 3
} else {
self.numberOfSections = 2
}
return self.numberOfSections
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (section == 0) {
return 1
} else if (section == 1 && main_arr.count > 0) {
return main_arr.count
} else {
return sub_arr.count
}
}
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
switch indexPath.section {
case 1:
main_arr.remove(at: indexPath.row)
case 2:
sub_arr.remove(at: indexPath.row)
default:
print("default 001")
}
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
EDIT 1
Я пытался справиться с глобальной переменной, отвечающей за NumberOfSections поэтому, когда любой из моих arrays.count == 0 он будет уменьшен на 1, но это не решило проблему.
Я полностью понимаю сообщение об ошибке, например, если у меня есть 3 раздела, и я удаляю весь контент одного из них, я должен удалить один раздел и удалить его из источника данных.
Быстрее меня. :) – Eiko
Итак, вы говорите, что я должен вызвать 'tableView.deleteSections (разделы: IndexSet, с: UITableViewRowAnimation)' после 'tableView.deleteRows (at: [indexPath], с: .fade)', если это было последний ряд? –
Да. Вам также потребуется вставить раздел, если вы получите новую ячейку в секции в какой-то момент после ее удаления. Но я бы предпочел бы иметь 3 раздела, некоторые из которых могут быть пустыми. Будет легче управлять удалением/вставкой, поскольку вы будете работать только с строками, а не с разделами и строками. – alexburtnik