Google地方信息未加载到TableView中

时间:2018-07-24 14:00:28

标签: ios swift uitableview google-places-api googleplacesautocomplete

我有一个UIViewController,它将另一个UIViewController呈现为UISearchResultsController。

我希望这个searchResultsController在搜索时显示GooglePlaces。

我正在控制台中打印出所有自动完成预测,但是,UITableView并未加载数据。

这是我的职责;

func updateSearchResults(for searchController: UISearchController) {
        searchController.searchResultsUpdater = self
        if searchController.isActive {
            searchController.searchResultsController?.view.isHidden = false
        }
        if searchController.searchBar.text == "" {
            self.searchResults.removeAll()
        } else {
            guard let query = searchController.searchBar.text else { return }
            GMSPlacesClient.shared().autocompleteQuery(query, bounds: nil, filter: filteredResults) { (predictions, error) in
                if error != nil {
                    print(error as Any)
                    return
                } else {
                    guard let searchPredictions = predictions else { return }
                    self.searchResults = searchPredictions
                    print("PREDICTION: \(searchPredictions)")
                    DispatchQueue.main.async {
                        self.resultsTableView.reloadData()
                    }
                }
            }
        }
    }

卫生检查

  1. TableView委托
  2. TableView数据源
  3. 预测
  4. numberOfRowsInSection

1和2设置为self。

3正在打印;

GMSAutocompletePrediction 0x6000037f0450: "England Street, Charlotte, NC, USA", id: EiJFbmdsYW5kIFN0cmVldCwgQ2hhcmxvdHRlLCBOQywgVVNB, types: (
    route,
    geocode

4给了我正确的预测量

我在这里遵循Google的自定义实现;

https://developers.google.com/places/ios-sdk/autocomplete#get_place_predictions_programmatically

在“以编程方式获取位置预测”下

一如既往地感谢您的帮助。

更新:TableView方法

extension SearchResultsController: UITableViewDelegate, UITableViewDataSource {

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return searchResults.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let resultsCell = resultsTableView.dequeueReusableCell(withIdentifier: resultsCellIdentifier, for: indexPath) as! ResultsCell
    let resultsAttributedFullText = searchResults[indexPath.row].attributedFullText.string
    resultsCell.textLabel?.text = resultsAttributedFullText
    return resultsCell
}

更新:cellForRowAt

进一步检查我的cellForRowAt函数;

let results = searchResults[indexPath.row].placeID

在控制台上打印results不会给我任何输出。

更新:

self.searchResults = searchPredictions处添加断点结果

breakpoint print out

更新:

在控制台中出现以下错误;

[BoringSSL] nw_protocol_boringssl_get_output_frames(1300) [C3.1:2][0x7ffd627057e0] get output frames failed, state 8196

不确定是否可以将其连接到我的问题上,但还是要注意。

1 个答案:

答案 0 :(得分:0)

您可以替换以下内容吗?

DispatchQueue.main.async {
     self.resultsTableView.reloadData()
}

DispatchQueue.main.async {
     searchController.searchResultsController.resultsTableView.reloadData()
}