Ошибка 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
    }
}