代码之家  ›  专栏  ›  技术社区  ›  Fattaneh Talebi

为什么重新加载数据后调用ScrollToRow会导致崩溃?

  •  1
  • Fattaneh Talebi  · 技术社区  · 8 年前

    重新加载数据后调用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
    

    错误是:

    _ crollingtorowindexpath的内容偏移量:at滚动位置: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 与众不同?

    1 回复  |  直到 8 年前