Свифт - функция override метод TableView - метод не переопределить любой метод из суперкласса


Я хочу реализовать UISearchController, шаг за шагом используя этот учебник:

Поиск мест с помощью MKLocalSearchRequest и отображение результатов с помощью UISearchController

И в этом разделе...

Поиск местоположений с помощью MKLocalSearchRequest

...У меня есть проблема с шагом 3.Настройка источника данных табличного представления

extension LocationSearchTable {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return matchingItems.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell")!
    let selectedItem = matchingItems[indexPath.row].placemark
    cell.textLabel?.text = selectedItem.name
    cell.detailTextLabel?.text = ""
    return cell
  }
}

Ошибка: метод не переопределяет ни один метод из своего суперкласса

Я пытаюсь удалить override из функции cellForRowAtindexPath tableView, в этом случае я не имеют ошибки в Xcode, но имеют ошибку после выполнения:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'UITableView (<UITableView: 0x7ff8e03a3800; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = W+H;
gestureRecognizers = <NSArray: 0x604002046450>; layer = <CALayer: 0x604001626620>; 
contentOffset: {0, -56}; contentSize: {375, 132};adjustedContentInset: {56, 0, 0, 0}>) 
failed to obtain a cell from its dataSource(<CityWeather.LocationSearchTable: 0x7ff8de696e60>)'

Сообщение об ошибке кричит: failed to obtain a cell from its dataSource(<CityWeather.LocationSearchTable: 0x7ff8de696e60>)

Пожалуйста, скажи мне, что я делаю не так? И как я могу справиться с этой проблемой?? Спасибо.
2 4

2 ответа:

Учебник использует старый синтаксис для методов UITableviewDatasource (возможно, Swift 2.2):

Они вам сейчас нужны:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

}

Всегда используйте завершение кода XCode, где это возможно.

Как сказал Пунит Шарма, вам не нужно переопределять методы. Потому что вы используете UITableViewDatasourceUITableViewDelegate) в UIViewController.

Вам нужно установить делегат tableView в вашем ViewController.