У меня есть tableView с динамическим количеством разделов, и у каждого раздела есть динамическое количество строк.
Мой массив источников данных выглядит так
var detailsList = [[Any]]()
Однако я знаю тип, который будет добавлен в список, и они будут добавлены в определенном порядке. Давайте рассмотрим эти типы будут A, B, C.
В зависимости от доступности данных из API будет заполнено detailsList
. Следовательно, массив будет выглядеть примерно так:
[[A, A, A, A], [B, B, B], [C, C, C]]
В этом примере tableView имеет 3 секции, а numberOfRows зависит от количества подмассивов.
Вот как выглядит источник данных
extension ViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return detailsList.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return detailsList[section].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let _ = detailsList[indexPath.section] as? [A] {
return cellA
} else if let _ = detailsList[indexPath.section] as? [B] {
return cellB
} else if let _ = detailsList[indexPath.section] as? [C] {
return cellC
} else if let _ = detailsList[indexPath.section] as? [D] {
return cellD
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу вставить раздел.
Допустим, DataSource перед добавлением массива выглядит следующим образом
detailsList = [[A, A, A, A], [B, B, B], [C, C, C]]
После добавления нового раздела источник данных выглядит следующим образом
detailsList = [[A, A, A, A], [B, B, B], [C, C, C], [D, D, D, D]]
Я не могу сказать
tableView.insertRows(at: [indexPath], with: .none)
Приложение вылетает со следующим исключением
Завершение приложения из-за необработанного исключения
«NSInternalInconsistencyException», причина: «Неверное обновление: недействительно
количество разделов. Количество разделов, содержащихся в таблице
вид после обновления (4) должен быть равен числу секций
содержится в табличном представлении до обновления (3), плюс или минус
количество вставленных или удаленных разделов (0 вставлено, 0 удалено). '
Но если я скажу
tableView.reloadData()
работает как положено.
есть ли другой способ вставить новый раздел?