Ошибка: Не удается удалить ячейку из очереди с идентификатором myCell — необходимо зарегистрировать перо или класс для идентификатора или подключить ячейку-прототип в раскадровке

#swift #uitableview #uikit

Вопрос:

Почему возникает эта ошибка? Я указал идентификатор для TableViewCell классов и для TableViewCell и TableViewController .

Кроме того, я попытался зарегистрировать свой сотовый в viewDidLoad TableViewController :

 self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
 

но в этом случае я получил ошибку в той же строке:

Поток 1: сигнал SIGABRT

Код:

 class TableViewController: UITableViewController {

    //...
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! TableViewCell //ERROR HERE: Unable to dequeue a cell with identifier MyCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard

        return cell
    }
}
 

Настройки TableViewController:

введите описание изображения здесь

Настройки tableViewCell:

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Разве это не должно быть: self.tableView.register(TableViewCell.self, forCellReuseIdentifier: "MyCell") ? Так что используйте TableViewCell вместо UITableViewCell .

2. @koen в этом случае я получил ошибку: Thread 1: "*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]"

3.@koen Также я заметил странную вещь: у меня есть метка в ячейке, объявленной в раскадровке, поэтому я не могу перетащить ее из раскадровки в TableViewCell код (появляется синяя линия, но мне не предлагают создавать IBOutlet ). Если я попытаюсь перетащить метку TableViewController class , то все в порядке, я могу создавать IBOutlet . Я новичок в UIKit, поэтому я не понимаю, может ли это быть так?

4. Следуйте советам @koen. Теперь ошибка, которую вы получаете, находится в другом месте, а не там. Не могли бы вы найти, где он может разбиться?

5. @Larme в той же строке ( let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! TableViewCell )