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()
}
}