Ошибка Xcode: невозможно деактивировать ячейку с идентификатором MealTableViewCell
Я следил за учебником Apple здесь и обнаружил ошибку:
2016-01-12 09:34:32.909 FoodTracker[1812:124509] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier MealTableViewCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
Ошибка появляется при запуске программы, а красная выделенная строка отображается в строке класса AppDelegate.swift
Это строки кода, которые, как я считаю, вызывают ошибку, как я узнал через контрольные точки:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "MealTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MealTableViewCell
// Configure the cell...
let meal = meals[indexPath.row]
cell.nameLabel.text = meal.name
cell.photoImageView.image = meal.photo
cell.ratingControl.rating = meal.rating
return cell
}
Я огляделся в Интернете, и многие ответы сказали, что у TableCell есть идентификатор, как бы то ни было, и ошибка все еще появляется.
Пожалуйста, дайте мне знать, если мне нужно разместить дополнительную информацию.
Заранее спасибо
Ответы
Ответ 1
Это работает для меня..
![моя сцена]()
![Инспектор атрибутов]()
и я использую другой идентификатор, "DeviceDetailsCell"
let cellIdentifier = "DeviceDetailsCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! DeviceDetailsTableViewCell
Ответ 2
Только для записи, вот как я решил свою проблему:
Я взял текущий идентификатор, который был в инспекторе атрибутов, удалил его, нажал и отошел. После этого я щелкнул обратно в текстовое поле идентификатора и снова набрал идентификатор и нажал return. Затем я сохранил файл раскадровки, и он работал, когда я его запустил.
Ответ 3
В моем случае я брал UITableViewCell из отдельного xib файла (то есть не вставляя ячейку непосредственно в tableView в storyBoard) и забыл правильно зарегистрировать ячейку в tableView следующим образом:
self.tableView.register(UINib(nibName: "NAME_OF_THE_CELL_CLASS", bundle: nil), forCellReuseIdentifier: "REUSE_IDENTIFIER");
Ответ 4
Свифт (5.0)
У меня была та же проблема, но в моем случае представление было XIB, способ, которым я решил это было:
Bundle.main.loadNibNamed("MealTableViewCell", owner: self, options: nil)?.first as! MealTableViewCell
полный код будет следующим:
import UIKit
class MealTableViewCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
extension NameViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("MealTableViewCell", owner: self, options: nil)?.first as! MealTableViewCell
return cell
}
}