У меня есть tableView
внутри collectionViewCell
, и я получаю сообщение об ошибке при попытке перезагрузить данные.Перезагрузка данных из таблицыView в коллекцииViewCell
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:1610
Я попытался с помощью Dispatch.main.async
и, кажется, чтобы избавиться от этой проблемы. Единственное, что не требуется перезагружать данные и ничего не меняется в tableView
func cleanItems(completion: @escaping (Bool) -> Void) {
Dispatch.main.async {
cell.tableView.beginUpdates()
// Make changes in the Data Source
cell.tableView.deleteRows(at: selectedItems, with: .fade)
cell.tableView.endUpdates()
// Reloading sections accordingly depending on what the user has deleted
// Do I need to reload data here again? It used to work without Dispatch, but it wasn't stable
cell.tableView.reloadData()
// Updating items with if statements to reload data in Firebase
completion(true)
}
}
в этом не перегрузить данные на всех, и ничего, кажется, меняется. Хорошо, что я не получаю случайный сбой, что было до внедрения Dispatch.main.async
В каждом разделе я получил numberOfRows
, чтобы узнать, сколько строк после окончания обновлений.
print(cell.tableView.numberOfRows(inSection: 1))
и я получаю такое же количество строк, которые находятся в текущем виде.
Это очень важно, потому что если разделы tableView
равны нулю, то collectionViewCell
должен исчезнуть. И мы никогда не попадаем сюда в блок completion
, так как он говорит, что numberOfRows
никогда не менялся. Оставив нас с обновленным tableView
.
Вам также необходимо удалить объект из массива. –
Я сделал это в реальном коде, я просто упростил структуру здесь. То, как я это делаю, - это получить выбранныеIndexPaths и применить фильтр для удаления элементов в выбранныхIndexPaths. – Christian