Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CellForRowatinex未被调用_Ios_Swift_Uitableview_Google Places Api_Googleplacesautocomplete - Fatal编程技术网

Ios CellForRowatinex未被调用

Ios CellForRowatinex未被调用,ios,swift,uitableview,google-places-api,googleplacesautocomplete,Ios,Swift,Uitableview,Google Places Api,Googleplacesautocomplete,我正在使用Google Autocomplete在ViewController中将UITableView填充为UISearchController。但是,cellforrowatinex没有被调用,断点什么也不做 我检查过的东西 数据源设置为self 委托设置为self 正在控制台中打印数据 我有所有委托和数据源方法 尽管如此,当我使用UISearchController实现与主ViewController相同的代码时,它工作正常。这可能是因为UISearchController是不同的Vi

我正在使用Google Autocomplete在
ViewController
中将UITableView填充为
UISearchController
。但是,
cellforrowatinex
没有被调用,断点什么也不做

我检查过的东西

  • 数据源设置为self
  • 委托设置为self
  • 正在控制台中打印数据
  • 我有所有委托和数据源方法
尽管如此,当我使用
UISearchController
实现与主
ViewController
相同的代码时,它工作正常。这可能是因为
UISearchController
是不同的
ViewController

有什么想法吗?非常感谢您的帮助。-代码如下

地图控制器 结果控制器
您正在使用两个不同的
resultcontroller
实例,因为默认初始值设定项
resultcontroller()
的每次调用都会创建一个新实例

解决方案是延迟声明
searchController

private lazy var searchController : UISearchController = { 
    return UISearchController(searchResultsController: resultsController) 
}()

请注意,
resultsController
searchResultsController
的参数是两个不同的对象。默认初始值设定项
ResultsController()
总是创建一个新实例。如果在
表视图:numberOfRowsInSection:
中放置断点,会发生什么情况?
searchResults.count的值是多少?
在numberOfRows设置断点会给我带来什么;searchResults[GMSAutocompletePrediction]0值,在选择searchBar@vadian您是否有一个在另一个ViewController中设置UISearchController的更有效的示例?也许此更改将起作用
private lazy var searchController:UISearchController={return UISearchController(searchResultsController:resultsController)}()
更改确保只使用控制器的一个实例。
class ResultsController: UIViewController {

    private let tableView = UITableView()
    private let searchResultsCellIdentifier = "searchResultsCellIdentifier"
    private var gmsPlacesClient = GMSPlacesClient()
    private var searchResults = [GMSAutocompletePrediction]()

    lazy var filteredResults: GMSAutocompleteFilter = {
        let filteredResults = GMSAutocompleteFilter()
        filteredResults.type = .address
        return filteredResults
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        configureTableView()
    }

    func configureTableView() {
        tableView.delegate = self
        tableView.dataSource = self
        view.addSubview(tableView)
        tableView.anchor(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor,
                         paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0,
                         width: 0, height: 0)
        tableView.tableFooterView = UIView()
        tableView.register(ResultsCell.self, forCellReuseIdentifier: searchResultsCellIdentifier)
        tableView.keyboardDismissMode = .interactive
        tableView.backgroundColor = UIColor(red: 242/255, green: 242/255, blue: 243/255, alpha: 1)
    }
}

extension ResultsController: UITableViewDelegate, UITableViewDataSource {

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let searchResultsCell = tableView.dequeueReusableCell(withIdentifier: searchResultsCellIdentifier, for: indexPath) as! ResultsCell
        let result = searchResults[indexPath.row]
        searchResultsCell.result = result
        return searchResultsCell
    }
}
private lazy var searchController : UISearchController = { 
    return UISearchController(searchResultsController: resultsController) 
}()