при кодировании я получаю поток 1: фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения любых решений - PullRequest
0 голосов
/ 29 июня 2018

Я довольно новичок в iOS и пытаюсь создать контроллер табличного представления. При кодировании я получаю сообщение об ошибке в своем заголовке. Очевидно, что я делаю что-то не так. Может кто-нибудь, пожалуйста, объясните мне, что я делаю неправильно. Я оставлю свой код ниже.

Обратите внимание, что я не использую раскадровку.

class settingsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    let elements = ["horse", "cat", "dog", "potato","horse", "cat", "dog", "potato","horse", "cat", "dog", "potato"]

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        // Error is on the following line
        tableView.delegate = self
        tableView.dataSource = self

        super.viewDidLoad()
    }

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

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell") as! CustomTableViewCell

        cell.cellView.layer.cornerRadius = cell.cellView.frame.height / 2

        cell.animalLbl.text = elements[indexPath.row]
        cell.animalImage.image = UIImage(named: elements[indexPath.row])
        cell.animalImage.layer.cornerRadius = cell.animalImage.frame.height / 2

        return cell
    }
}

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Код, который вы дали, работает нормально, когда я прокомментировал эти строки

//  cell.cellView.layer.cornerRadius = cell.cellView.frame.height / 2

Что такое CellView? где вы создали ссылку?

0 голосов
/ 29 июня 2018

Вы заявляете, что не используете раскадровку, но объявили свою собственность tableView как точку продаж. Не делай этого. Розетки предназначены только для раскадровок.

На самом деле вы никогда не создаете экземпляр UITableView и не присваиваете его свойству tableView. Вот почему вы получаете сбой при попытке получить доступ к неявно развернутому необязательному элементу, который nil.

У вас также есть UIViewController. Почему бы не использовать UITableViewController и сэкономить много работы?

Вам также необходимо зарегистрировать свой класс ячейки.

Также обратите внимание, что стандартно начинать имена классов, структур и перечислений заглавными буквами. Имена переменных, функций и регистра начинаются со строчных букв.

Ваш код должен быть:

class SettingsViewController: UITableViewController {
    let elements = ["horse", "cat", "dog", "potato","horse", "cat", "dog", "potato","horse", "cat", "dog", "potato"]

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: "customCell")
    }

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

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell

        cell.cellView.layer.cornerRadius = cell.cellView.frame.height / 2

        cell.animalLbl.text = elements[indexPath.row]
        cell.animalImage.image = UIImage(named: elements[indexPath.row])
        cell.animalImage.layer.cornerRadius = cell.animalImage.frame.height / 2

        return cell
    }
}

Еще одна вещь, которую следует рассмотреть. Поскольку вы делаете все строки одинаковой высоты, было бы более эффективно удалить реализацию метода heightForRowAt и добавить следующую строку в viewDidLoad:

tableView.rowHeight = 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...