Swift 5.5:Async @objc didPullToRefresh 选择器使应用程序崩溃并出现错误 EXC_BAD_ACCESS
Swift 5.5: Async @objc didPullToRefresh selector crashes app with error EXC_BAD_ACCESS
我有一个 table,我在其中添加了 refreshControl,当我下拉刷新内容时,我重置了向 table 提供数据的数组,然后立即请求新的通过 API 调用的数据。
到目前为止,我已经使用完成处理程序和协议将数据导入 table 视图,但我想将逻辑移至 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()
}
}
我意识到 didPullToRefresh 不需要标记为异步。从函数签名中删除“async”解决了问题
我有一个 table,我在其中添加了 refreshControl,当我下拉刷新内容时,我重置了向 table 提供数据的数组,然后立即请求新的通过 API 调用的数据。
到目前为止,我已经使用完成处理程序和协议将数据导入 table 视图,但我想将逻辑移至 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()
}
}
我意识到 didPullToRefresh 不需要标记为异步。从函数签名中删除“async”解决了问题