gpt4 book ai didi

ios - 数据源不更新单元格

转载 作者:行者123 更新时间:2023-11-30 11:17:14 29 4
gpt4 key购买 nike

当我尝试从相应 ViewController 内的闭包更新数据源(在单独的类中自定义)时,它将无法工作。

所以这是我调用的代码来更新数据源

extension YelpSearchController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {

guard let searchTerm = searchController.searchBar.text else {
return
}

let yelpCoordinate = YLPCoordinate(latitude: 37.785834000000001, longitude: -122.406417)
let yelpClient = YLPClient.init(apiKey: appSecret)
yelpClient.search(with: yelpCoordinate, term: searchTerm , limit: 30, offset: 1, sort: YLPSortType.distance) { [weak self] result, error in
guard let results = result else { return }
let businesses = results.businesses
self?.dataSource.update(with: businesses)
}
}
}

这是刚刚更新数据源类中的数据变量的函数,如下所示:

private var data = [YLPBusiness]()
func update(with data: [YLPBusiness]) {
self.data = data
}

问题是当我调用委托(delegate)方法时,根据数据源的需要,它们最初被调用,但是当它们被调用时,数据变量仍然没有更新,所以数据为零。

例如,如果我尝试在更新函数中打印 data.count 我会得到结果。但在任何委托(delegate)方法(cellForRowAt、numberOfRowsInSection)内部,它都是nil。因此,除了更新函数之外,所有涉及和使用数据变量的方法都不会获取数据,因为 View 正在加载,但数据是在用户在搜索字段中输入后出现的。

所以问题是如何让委托(delegate)方法可以访问数据?

最佳答案

从闭包内部收到数据后忘记更新数据源。

yelpClient.search(with: yelpCoordinate, term: searchTerm , limit: 30, offset:    1, sort: YLPSortType.distance) { [weak self] result, error in
guard let results = result else { return }
let businesses = results.businesses
self?.dataSource.update(with: businesses)
DispatchQueue.main.async {. // added this
self?.tableView.reloadData()
}

非常感谢 DonMag 提供的正确答案。

关于ios - 数据源不更新单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51631977/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com