此类不符合键的键值编码

Posted

技术标签:

【中文标题】此类不符合键的键值编码【英文标题】:this class is not key value coding-compliant for the key 【发布时间】:2016-07-21 06:27:29 【问题描述】:

我对 swift 开发非常陌生,我正在研究苹果提供的 swift 教程的 this section。我为嵌套在表格单元格中的标签、图像和自定义视图创建了一个出口。当我运行时出现此错误

2016-07-20 23:16:11.110 FoodTracker[8446:3016336] Interface Builder 文件中的未知类 MealTableViewCell。 2016-07-20 23:16:11.124 FoodTracker[8446:3016336] * 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合键值编码键名标签。 * 首先抛出调用栈:

没有重复的插座,我相信我的表格视图控制器中使用的 cellIdentifier 是正确的。 我的表格单元格

import UIKit

class MealTableViewCell: UITableViewCell 

//    MARK: Properties
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var photoImageView: UIImageView!
@IBOutlet weak var ratingControl: RatingControl!

override func awakeFromNib() 
    super.awakeFromNib()


override func setSelected(selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)

我的表格视图控制器

import UIKit

class MealTableViewController: UITableViewController 
// MARK: Properties

var meals = [Meal]()

override func viewDidLoad() 
    super.viewDidLoad()
    loadSampleMeals()


func loadSampleMeals() 
    let photo1 = UIImage(named: "meal1")!
    let meal1 = Meal(name: "Caprese Salad", photo: photo1, rating: 4)!

    let photo2 = UIImage(named: "meal2")!
    let meal2 = Meal(name: "Chicken and Potatoes", photo: photo2, rating: 5)!

    let photo3 = UIImage(named: "meal3")!
    let meal3 = Meal(name: "Pasta with Meatballs", photo: photo3, rating: 3)!

    meals += [meal1, meal2, meal3]


override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
    return 1


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return meals.count


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    // Table view cells are reused and should be dequeued using a cell identifier.
    let cellIdentifier = "MealTableViewCell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MealTableViewCell

    // Fetches the appropriate meal for the data source layout.
    let meal = meals[indexPath.row]

    cell.nameLabel.text = meal.name
    cell.photoImageView.image = meal.photo
    cell.ratingControl.rating = meal.rating

    return cell

谢谢!

【问题讨论】:

你在storyboard中设置了RatingControl的类吗?? 【参考方案1】:

检查您的故事板文件中是否存在损坏的插座链接。找到您的控制器并control-单击其笔尖上方的黄色圆圈以打开操作和插座弹出框。您应该看到带有黄色警告标志的nameLabel 出口。将其重新连接到控制器的文件,如果重复则将其删除。

【讨论】:

【参考方案2】:

很简单,故事板找不到名称为“nameLabel”的插座。因此,要么使用该名称创建标签,要么从情节提要中删除所创建标签的引用。

步骤如下

只需单击情节提要并选择最后一个 Tab。

现在搜索 nameLabel 并单击 cross 断开连接。 一切顺利;)

【讨论】:

【参考方案3】:

首先,您必须将您的UITableView 从您的界面构建器链接到您的MealTableViewController 类(Ctrl + drag

然后,在 MealTableViewController 类的 viewDidLoad 方法中,您必须将自定义单元格类注册到表格视图:

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

【讨论】:

感谢您的评论,我试过了,现在当我调用“dequeueReusableCellWithIdentifier”时,我的单元格被返回,但它的属性为 nil,我不知道为什么。他们的插座设置正确

以上是关于此类不符合键的键值编码的主要内容,如果未能解决你的问题,请参考以下文章

MPMediaItem 此类与键的键值编码不兼容

此类不符合 @IBInspectable 的键值编码

iOS/Facebook 登录错误:此类与键的键值编码不兼容

编辑核心数据会产生错误,此类与键的键值编码不兼容

使用 Restkit 0.20 映射此类与键的键值编码不兼容

iOS 崩溃:“此类不符合键 url 的键值编码”