gpt4 book ai didi

ios - 为什么在它之后调用 scrollToRow 时重新加载数据会导致崩溃?

转载 作者:行者123 更新时间:2023-11-28 05:58:03 26 4
gpt4 key购买 nike

重新加载数据会在其后调用 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) beyond bounds (20) for section (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 有所不同?

最佳答案

我找到的最简单的答案来自 GCD Main queue vs Main thread

While every app will ever only have one main thread, it is possible for many different queues to execute on this one main thread.

某些API不仅依赖于运行在主线程上,还依赖于主队列,检查当前队列比检查当前线程更安全。

关于ios - 为什么在它之后调用 scrollToRow 时重新加载数据会导致崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50772304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com