NSUnknownKeyException:此类不是密钥的密钥值编码兼容

时间:2016-12-08 13:44:12

标签: ios swift xcode uitableview

我对使用Swift进行编码非常陌生,我尝试使用数据填充UIViewController内部的UITableView,但是当我使用UITableView导航到屏幕时,应用程序崩溃时出现以下错误:

2016-12-08 14:22:47.265712 Evil Quest[300:18048] Unknown class QuestCell in Interface 
Builder file.
2016-12-08 14:22:47.270248 Evil Quest[300:18048] *** Terminating app due to uncaught 
exception 'NSUnknownKeyException', reason: '[<UITableViewCell 0x101847600> 
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 
lblQuestName.'

我不太确定我做错了什么,而且我不确定我应该在这里发布哪些代码,所以如果你需要代码的一部分,那么解决这个问题,你可以告诉我,我会把它添加到问题中。

提前致谢。

修改

cellForRowAt功能:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:QuestCell = tableView.dequeueReusableCell(withIdentifier: "QuestCell", for: indexPath as IndexPath) as! QuestCell

    let row = indexPath.row
    cell.lblQuestName.text = quests[row].name

    return cell
}

QuestCell类代码:

import UIKit

class QuestCell: UITableViewCell {

    @IBOutlet weak var lblQuestName: UILabel!

    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
    }

}

2 个答案:

答案 0 :(得分:2)

也许你需要注册课程。在TableViewController类的viewDidLoad方法中尝试这个。

self.tableView.registerClass(QuestCell.self, forCellReuseIdentifier: "QuestCell")

你也应该检查弱变量是否存在。 在代码的这一行放置一个断点:

cell.lblQuestName.text = quests[row].name

答案 1 :(得分:0)

转到设置了lblQuestName标签的故事板。检查该标签是否设置了两个或更多出口。

只能连接一个插座。如果视图未与插座正确连接,则会引发此错误。