数据源未更新单元格

时间:2018-08-01 11:19:49

标签: ios swift

当我尝试从各自的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
}

问题是,当我调用委托方法时(根据数据源的要求),它们最初被调用,但是当它们是数据变量时,它们仍未更新,因此数据为nil。

例如,如果我尝试在update func内打印data.count,则会得到结果。但是在任何委托方法(cellForRowAt,numberOfRowsInSection)中,都为零。因此,与数据变量有关的所有方法和使用方法(除了更新功能)都不会获取数据,因为视图正在加载,但是当用户在搜索字段中输入时数据才出现。

所以问题是如何使委托方法可以访问数据?

1 个答案:

答案 0 :(得分:0)

在我从封闭内部接收到数据后,忘记更新数据源。

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的正确答案。