Перезагрузка данных вызывает сбой при вызове scrollToRow после него.Я должен написать этот код в DispatchQueue.main.async
, но почему?Почему я должен сказать, чтобы переключиться на основную очередь, когда я был в основной очереди?
self.tableView.reloadData()
print(Thread.current). // It is main
self.tableView.scrollToRow(at: indexPathToScroll, at: .top, animated: false)
print(Thread.current). // It is main
Ошибка:
_contentOffsetForScrollingToRowAtIndexPath: atScrollPosition: usingPresentationValues:]: row(20) за пределами (20) для секции (0).
Проблема была решена следующим образом:
DispatchQueue.main.async(execute: {
self.tableView.reloadData()
print(Thread.current). // It is main
self.tableView.scrollToRow(at: indexPathToScroll, at: .top, animated: false)
print(Thread.current). // It is main
})
Когда я печатал в первом коде, он был запущенв основной теме.Почему DispatchQueue.main.async
сделал разницу?