#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
)