我对快速开发非常陌生,我正在研究提供快速教程的苹果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
}}
谢谢!
答案 0 :(得分:6)
检查故事板文件中是否有损坏的插座链接。找到您的控制器并control
- 单击其笔尖上方的黄色圆圈以打开操作和插座弹出窗口。您应该看到nameLabel
的插座带有黄色警告标志。将其重新连接到您的控制器文件,如果重复,则将其删除。
答案 1 :(得分:2)
它非常简单,故事板找不到名为“nameLabel”的插座。因此,要么使用该名称创建标签,要么从故事板中删除创建的标签的引用。
以下是步骤
现在搜索nameLabel并单击cross以断开连接。 一切顺利;)
答案 2 :(得分:0)
首先,您必须将UITableView
从界面构建器链接到MealTableViewController
类(Ctrl
+ drag
)
然后,在viewDidLoad
类的MealTableViewController
方法中,您必须将自定义单元格类注册到表视图中:
self.tableView.registerClass(MealTableViewCell.self, forCellReuseIdentifier: "MealTableViewCell")