Swift 苹果';s Xcode开发教程:“;线程1:致命错误:出列的单元格不是MealTableViewCell的实例;

Swift 苹果';s Xcode开发教程:“;线程1:致命错误:出列的单元格不是MealTableViewCell的实例;,swift,xcode,Swift,Xcode,我是Xcode/swift新手,两周来我一直在努力完成苹果的开始开发iOS应用程序(swift)教程,以构建“FoodTracker”应用程序。多亏了SOF,我终于来到了最后一页,但现在我被标题中的错误所困扰 我的目标是让应用程序100%正常运行。我甚至用代码复制了这个页面,看看是否可以这样做,但没有用。在此之前,应用程序运行正常。我采取的最后一步是让应用程序在列表中列出三个示例(应用程序的第一页)。第二个页面(用户可以在其中输入信息)没有链接到第一个表视图控制器,但现在列表中应该显示3个示例产

我是Xcode/swift新手,两周来我一直在努力完成苹果的开始开发iOS应用程序(swift)教程,以构建“FoodTracker”应用程序。多亏了SOF,我终于来到了最后一页,但现在我被标题中的错误所困扰

我的目标是让应用程序100%正常运行。我甚至用代码复制了这个页面,看看是否可以这样做,但没有用。在此之前,应用程序运行正常。我采取的最后一步是让应用程序在列表中列出三个示例(应用程序的第一页)。第二个页面(用户可以在其中输入信息)没有链接到第一个表视图控制器,但现在列表中应该显示3个示例产品

导入UIKit
类MealTableViewController:UITableViewController{
//马克:财产
var膳食=[膳食]()
重写func viewDidLoad(){
super.viewDidLoad()
//加载示例数据。
loadsamplefines()
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
//标记:-表视图数据源
重写func numberOfSections(在tableView:UITableView中)->Int{
返回1
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
回来吃饭。计数
}
重写func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
//表视图单元格被重用,应使用单元格标识符将其退出队列。
让cellIdentifier=“MealTableViewCell”
**guard let cell=tableView.dequeueReusableCell(标识符:cellIdentifier,for:indexPath)作为?MealTableViewCell else{
fatalError(“出列的单元格不是MealTableViewCell的实例。”)**
}
//为数据源布局获取适当的数据。
让膳食=膳食[indexPath.row]
cell.namelab.text=mean.name
cell.photoImageView.image=meat.photo
cell.ratingControl.rating=膳食.rating
返回单元
}
/*
//替代以支持表视图的条件编辑。
重写func tableView(tableView:UITableView,canEditRowAt indexath:indexPath)->Bool{
//如果不希望指定的项可编辑,则返回false。
返回真值
}
*/
/*
//替代以支持编辑表格视图。
重写func tableView(tableView:UITableView,commit editingStyle:UITableViewCellEditingStyle,forRowAt indexPath:indexPath){
如果editingStyle==.delete{
//从数据源中删除该行
tableView.deleteRows(位于:[indexPath],带:.fade)
}如果editingStyle==,则为else。插入{
//创建相应类的新实例,将其插入数组,并向表视图添加新行
}
}
*/
/*
//替代以支持重新排列表视图。
重写func tableView(tableView:UITableView,moveRowAt fromIndexPath:IndexPath,to:IndexPath){
}
*/
/*
//重写以支持表视图的条件重新排列。
重写func tableView(tableView:UITableView,canMoveRowAt indexath:indexPath)->Bool{
//如果不希望该项目可重新订购,则返回false。
返回真值
}
*/
/*
//标记:-导航
//在基于故事板的应用程序中,您通常需要在导航之前做一些准备
覆盖功能准备(对于segue:UIStoryboardSegue,发送方:有吗?){
//使用segue.destinationViewController获取新的视图控制器。
//将选定对象传递给新的视图控制器。
}
*/
//标记:私有方法
私有函数loadSampleFinds(){
让photo1=UIImage(命名为:“meal1”)
让photo2=UIImage(命名为:“meal2”)
让photo3=UIImage(命名为:“meal3”)
guard let meal1=膳食(名称:“Caprese沙拉”,照片:照片1,等级:4)其他{
fatalError(“无法实例化meal1”)
}
guard let meal2=膳食(名称:“鸡肉和土豆”,照片:照片2,等级:5)其他{
fatalError(“无法实例化meal2”)
}
guard let meal3=膳食(名称:“肉丸意大利面”,照片:照片3,等级:3)其他{
fatalError(“无法实例化meal2”)
}
膳食+=[meal1、meal2、meal3]
}
}

使用自定义
UITableViewCell
时,请确保在情节提要中使用自定义类名,在您的情况下是
MealTableViewCell
。您需要在两个地方执行此操作:

  • 在属性检查器->将标识符字段设置为
    MealTableViewCell
  • 在Identity inspector->将类字段设置为
    MealTableViewCell

  • 很容易忘记其中一个错误。

    我在上面的代码中将错误标记为粗体,但我看不到它,因此下面是错误行:guard let cell=tableView.dequeueReusableCell(with identifier:cellIdentifier,for:indexPath)as?MealTableViewCell else{fatalError(“出列的单元格不是MealTableViewCell的实例。”)您是否将故事板中的单元格设置为
    MealTableViewCell
    ?您好Koen,感谢您的回复。因此,在表视图控制器中有一个包含该单元格的表视图。选择该单元格时,属性检查器中的标识符显示为MealTableViewCell。是否正确?您需要在属性检查器和身份检查员。很容易忘记其中一个。这似乎已经做到了!非常感谢Koen!我还有另一个问题,但我认为这没有关系。我应该在这里打开另一个帖子吗?