Xcode错误:无法使用标识符MealTableViewCell对单元格进行出列

时间:2016-01-11 20:52:57

标签: ios xcode swift

我一直在关注苹果教程here并遇到错误:

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有一个标识符,但我的确如此,错误仍然会弹出。

如果我需要发布更多信息,请告诉我。

提前致谢

4 个答案:

答案 0 :(得分:31)

这对我有用..

my Scene

Attributes inspector

我正在使用不同的标识符," DeviceDetailsCell"

let cellIdentifier = "DeviceDetailsCell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! DeviceDetailsTableViewCell

答案 1 :(得分:12)

仅供记录,以下是我解决问题的方法:

我获取了属性检查器中的当前标识符,删除了它,按下了返回并单击了。之后,我单击回标识符文本框并重新键入标识符并按下返回。然后我保存了故事板文件,当我运行它时它就起作用了。

答案 2 :(得分:1)

在我的情况下,我从单独的xib文件中获取UITableViewCell(即,不直接将单元格插入storyBoard中的tableView),我忘记以这种方式在tableView中正确注册单元格:

self.tableView.register(UINib(nibName: "NAME_OF_THE_CELL_CLASS", bundle: nil), forCellReuseIdentifier: "REUSE_IDENTIFIER");

答案 3 :(得分:0)

快速(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
    }
}