Ios 为什么重新加载数据后调用scrollToRow会导致崩溃?
当在数据之后调用scrollToRow时,重新加载数据会导致崩溃。我必须在Ios 为什么重新加载数据后调用scrollToRow会导致崩溃?,ios,swift,uitableview,reloaddata,Ios,Swift,Uitableview,Reloaddata,当在数据之后调用scrollToRow时,重新加载数据会导致崩溃。我必须在DispatchQueue.main.async中编写此代码,但是,为什么?当我在主队列中时,为什么要说切换到主队列 self.tableView.reloadData() print(Thread.current). // It is main self.tableView.scrollToRow(at: indexPathToScroll, at: .top, animated: false) print(Threa
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
错误是:
_ContentOffsetForScrollingToRowatineXPath:atScrollPosition:usingPresentationValues::
第(20)行超出第(0)节的边界(20)
问题是这样解决的:
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
起了作用我找到的最简单的答案是 虽然每个应用程序都只有一个主线程,但在这个主线程上执行许多不同的队列是可能的 某些API不仅依赖于在主线程上运行,还依赖于在主队列上运行,检查当前队列比检查当前线程更安全