单元格未出现在 UITableView 中 - Swift 3

Cells not appearing in UITableView - Swift 3

我有以下代码,旨在从 UISearchBar 获取用户输入,基于它创建并启动 MKLocalSearch,然后显示所有 MKMapItem UITableView 中的名字。以下代码不起作用,而是因错误而崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert row 0 into section 0, but there are only 0 rows in section 0 after the update'

代码:

import UIKit
import MapKit

class TableViewController: UITableViewController, UISearchResultsUpdating {

    var localSearchRequest:MKLocalSearchRequest!
    var localSearch:MKLocalSearch!
    var localSearchResponse:MKLocalSearchResponse!
    var locations = [MKMapItem]()

    @available(iOS 8.0, *)
    public func updateSearchResults(for searchController: UISearchController) {
        localSearch?.cancel()
        localSearchRequest = MKLocalSearchRequest()
        localSearchRequest.naturalLanguageQuery = searchController.searchBar.text
        localSearch = MKLocalSearch(request: localSearchRequest)
        localSearch.start { (localSearchResponse, error) -> Void in
            if let response = localSearchResponse {
                self.locations.removeAll()
                for mapItem in response.mapItems {
                    self.locations.append(mapItem)
                    print(mapItem)
                }
                if !response.mapItems.isEmpty {
                    let indexPaths = (0..<response.mapItems.count).map { IndexPath(row: [=11=], section: 0) }
                    self.tableView.insertRows(at: indexPaths, with: .none)
                }
            }
        }
    }

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

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.locations.count;
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
        let row = indexPath.row
        cell.textLabel?.text = self.locations[row].name
        return cell
    }

    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()
        searchController.searchResultsUpdater = self
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.dimsBackgroundDuringPresentation = false
        searchController.searchBar.sizeToFit()
        searchController.searchBar.tintColor = UIColor(colorLiteralRed: 1, green: 1, blue: 1, alpha: 1)
        searchController.searchBar.placeholder = "Location"
        searchController.searchBar.returnKeyType = UIReturnKeyType(rawValue: 6)!
        self.tableView.tableHeaderView = searchController.searchBar
    }

    override func viewWillDisappear(_ animated: Bool) {
        searchController.isActive = false
        searchController.searchBar.isHidden = true
    }

    override func viewDidDisappear(_ animated: Bool) {
        searchController.isActive = false
        searchController.searchBar.isHidden = true
    }
}

.
TableViewController 插座:

原来我没有设置正确的数据源 Class 到 link 到 UITableView
注册单元格原型 .xib 还允许我在插入具有重用标识符

的单元格时不会出错

如何在您的 viewDidLoad 中添加这一行?

tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "Cell")