0

refreshControl を追加したテーブルがあり、プルダウンしてコンテンツを更新すると、テーブルにデータを供給する配列をリセットし、すぐに API 呼び出しを介して新しいデータを要求します。

これまで、テーブル ビューにデータを取得するために完了ハンドラーとプロトコルを使用してきましたが、ネットワーク呼び出しとネストされたクロージャーのピラミッドに必要な複雑さのために、ロジックを async/await に移動したいと考えています。

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