0

我有一个添加了 refreshControl 的表,当我下拉刷新内容时,我重置了为表提供数据的数组,然后立即通过 API 调用请求新数据。

到目前为止,我一直使用完成处理程序和协议将数据放入表视图中,但由于网络调用和嵌套闭包金字塔所需的复杂性,我想将逻辑移动到异步/等待。

在 viewDidLoad 中填充视图可以正常工作,但使用 pullToRefresh 选择器时出现错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0xbcf917df8160)

执行:

override func viewDidLoad() {
    super.viewDidLoad()
    setupView()
    setupTableView()
    setupTableRefreshControl()
    Task {
      await getBalances() //async network call
      myTable.reloadData()
    }
  } 
func setupTableRefreshControl() {
    myTable.refreshControl = UIRefreshControl()
    myTable.refreshControl?.addTarget(self, action: #selector(didPullToRefresh), for: .valueChanged)
  }

使应用程序崩溃的代码:

   @objc func didPullToRefresh() async {
    balance.reset() // reset array to []
    Task {
      await getBalances() //async network call
      myTable.reloadData()
    }
  }
4

1 回答 1

0

我意识到 didPullToRefresh 不需要标记为异步。从函数签名中删除“异步”可以解决问题

于 2022-02-13T11:55:00.350 回答