Nano Hash - криптовалюты, майнинг, программирование

Мое приложение аварийно завершает работу с сообщением «Не удалось преобразовать значение типа x в UITableViewdelegate».

Ошибка

2017-09-08 19:32:51.886 Metropolitan League 1.5.1[1602:24950] Неизвестный класс parksTable в файле Interface Builder. Не удалось преобразовать значение типа «Metropolitan_League

import UIKit

class ParkViewController: UIViewController {
     var parkNames = ["Sunnyside", "South Oak", "Tower", "Arno", "Arbor", "Holmes", "Brookside", "Brookside Tennis Courts", "Loose", "Gilham", "Brush Creek", "Westwood"]

    @IBOutlet weak var parksTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.parksTable.delegate = self as! UITableViewDelegate
        self.parksTable.dataSource = self as! UITableViewDataSource
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        print(indexPath.row)

        cell.textLabel?.text = parkNames[indexPath.row]
        return cell
    }
}
5_1.ParkViewController» (0x10189f950) в «UITableViewDelegate» (0x103d7b870).
(lldb)

Код:

import UIKit

class ParkViewController: UIViewController {
     var parkNames = ["Sunnyside", "South Oak", "Tower", "Arno", "Arbor", "Holmes", "Brookside", "Brookside Tennis Courts", "Loose", "Gilham", "Brush Creek", "Westwood"]

    @IBOutlet weak var parksTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.parksTable.delegate = self as! UITableViewDelegate
        self.parksTable.dataSource = self as! UITableViewDataSource
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        print(indexPath.row)

        cell.textLabel?.text = parkNames[indexPath.row]
        return cell
    }
}

Кроме того, в viewDidLoad я получаю предупреждение:

«Обработка принудительного приведения к «UITableViewDatasource» как необязательного никогда не приведет к нулевому результату»

Что это значит? Единственная причина, по которой у меня есть 'as! UITableViewDataSource», потому что мне сказал Xcode.


  • as! почти всегда плохая идея, особенно если компилятор говорит вам добавить его. Когда вы видите это предложение, вы должны попытаться понять причину ошибки. В этом случае это потому, что ваш контроллер представления не соответствует UITableViewDelegate и UITableViewDataSource, как будто он должен быть назначен этим свойствам. 09.09.2017
  • И первое сообщение о неправильной конфигурации в вашем xib/storyboard. Вы устанавливаете класс таблицы на tableView; вместо этого вам нужно установить ссылку на свойство. 09.09.2017
  • Ранее кто-то сказал мне, что ошибки, которые я получаю, связаны с тем, что он ДЕЙСТВИТЕЛЬНО соответствует требованиям и что мой код избыточен. 09.09.2017
  • Кроме того, нужно ли моему контроллеру просмотра xib и раскадровки одно и то же имя класса? раскадровка названа правильно, но xib не позволяет мне назвать класс. 09.09.2017
  • UITableViewController уже соответствует протоколу делегата и источника данных, но у вас есть UIViewController, который не соответствует. 09.09.2017
  • Вы говорите, что у вас есть и xib, и раскадровка для одного и того же класса? Это... технически возможно, но почти наверняка не то, что вам нужно. 09.09.2017
  • Помимо всего прочего, что не так с вашим кодом, ваша реализация cellForRowAt не создает ячейку должным образом. Взгляните на бесчисленные примеры табличных представлений и узнайте, как правильно удалить из очереди повторно используемую ячейку. 09.09.2017

Ответы:


1

Измените свой код на эту строку:

class ParkViewController: UIViewController, UITableViewDelegate,  UITableViewDataSource {

Кроме того, вы создаете табличное представление программно, что означает, что вам также не нужен IBOutlet. В противном случае вам не нужно устанавливать делегата и источник данных в viewDidLoad.

Так что исправьте эти несколько проблем в своем коде, и он должен работать.

class ParkViewController: UIViewController , UITableViewDelegate,  UITableViewDataSource{
    var parkNames = ["Sunnyside", "South Oak", "Tower", "Arno", "Arbor", "Holmes", "Brookside", "Brookside Tennis Courts", "Loose", "Gilham", "Brush Creek", "Westwood"]

    var parksTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.parksTable.delegate = self as! UITableViewDelegate
        self.parksTable.dataSource = self as! UITableViewDataSource
    }
09.09.2017
  • Вам не нужно ни as! UITableViewXXX. 09.09.2017
  • И почему вы утверждаете, что ОП программно создает табличное представление? В вопросе не показан код, который создает табличное представление с помощью кода. 09.09.2017
  • Наконец-то это сработало!! Спасибо. Увидимся со следующей ошибкой, ха-ха 09.09.2017
  • Кроме того, я просто удалил ! от обоих, но сохранил as. 09.09.2017
  • @ Александр, вообще не используйте as. Просто сделайте parksTable.delegate = self. Актерский состав не нужен. 09.09.2017
  • Я сделал это так, но были ошибки, но, похоже, теперь все работает гладко. 09.09.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..