Я работаю над приложением, в котором я вычисляю данные в цикле, и для каждого цикла я хочу опубликовать новый раздел в виде таблицы, показывающий этот результат. Я добавляю результаты в массив и вызывая tableView.reloadData()
. Проблема в том, что пользовательский интерфейс не обновляется после каждого цикла, но только после последнего цикла цикла и все делается.UITableView reloadData не работает должным образом
Некоторые примечания:
- Делегирование и DataSource подключены правильно, так как метод работает, просто не каждый раз, когда я хочу
- Я также попытался диспетчерская весь цикл в асинхронном блок
- Я пытался дозвониться только
reloadData()
в асинхронном блоке (источники лота рекомендовали попробовать) - Я пробовал множество комбинаций, включая функции
beginUpdates, endUpdates, reload/insert sections/rows
. Вы получаете дрейф. - При вызове
reloadData()
, метод NumberOfSections всегда вызывается, но cellForRow только после того, как вся работа сделана - Для клеток, которые я использую собственные клетки
UITableViewAutomaticDimension
собственности на Tableview. Это гарантирует правильность отображения многострочного текста. Я действительно хочу верить, что мои ограничения на ячейки прекрасны.
Исчисление Обзор Код:
override func viewDidAppear(animated: Bool) {
for i in 0..<data.count {
// Do computationally intensive work
results[i].append(result) // multidimensional array
Util.safeInc(&doneCounter) // made thread-safe just in case with objc_sync_enter
resultTableView.reloadData()
}
}
Ниже приведены функции Tableview. Я создал расширяемый tableview. Также есть некоторые функции заголовка, чтобы создать отступы между разделами и функцию выбора. Они, похоже, не важны здесь.
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if expandedCells.contains(section) {
return results[section].count + 1
} else {
return 1
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return doneCounter
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("titleCell") as! electionNameTableViewCell
cell.label.text = ...
return cell
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("resultCell") as! resultTableViewCell
// set texts for cell labels
return cell
}
}
Любые идеи?
Как я уже говорил (пятая нота), это рекомендуется в большинстве мест, но по какой-то причине это работает даже меньше, так как даже не 'numberOfSectionsInTableView' вызывается, когда я делаю это. – Kelo
Я читал это, но было непонятно, что вы назвали его в основном потоке. Для вычислительной части вы пытались изменить логику, как вызвать блок завершения после каждого «цикла», который вызывает перезагрузку данных + до тех пор, пока все вычисления не будут выполнены? – Loegic
Я попробую – Kelo