此类不符合键的键值编码
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,我不知道为什么。他们的插座设置正确以上是关于此类不符合键的键值编码的主要内容,如果未能解决你的问题,请参考以下文章
iOS/Facebook 登录错误:此类与键的键值编码不兼容