无法将“UITableViewCell”类型的值转换为“AppName.CustomCellName”

我正在尝试创建一个自动扩展的自定义单元格。 我正在使用这个github示例: https : //github.com/rcdilorenzo/Cell-Expander

这一行给出了运行时错误SIGABRT:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { (cell as! EventTableViewCell).watchFrameChanges() //Could not cast value of type 'UITableViewCell' (0x105aa1b80) to 'AppName.EventTableViewCell' (0x104287fe0). } 

我也检查了这篇文章的答案,接着是三个步骤,但没有运气: 无法将’UITableViewCell’类型的值转换为’(AppName)。(CustomCellName)’

我的自定义单元类看起来像这样:

 import UIKit class EventTableViewCell : UITableViewCell { ... } 

的cellForRowAtIndexPath:

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier( "eventCell", forIndexPath: indexPath) let date = self.eventArray[indexPath.row].startTime let calendar = NSCalendar.currentCalendar() let minutes = calendar.component(NSCalendarUnit.Minute, fromDate: date) var minutesString: String if (minutes == 0) { minutesString = "00" } else { minutesString = String(calendar.component(NSCalendarUnit.Minute, fromDate: date)) } let hours = calendar.component(NSCalendarUnit.Hour, fromDate: date) cell.textLabel?.text = self.eventArray[indexPath.row].title + " - \(hours):\(minutesString)" return cell } } 

请帮忙。

“我的viewDidLoad中有self.tableView.registerClass(UITableViewCell.self,forCellReuseIdentifier:”eventCell“)”

这可能会覆盖您在故事板中设置的值。 尝试删除此行,或将其更改为self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell")

在故事板中,单击单元格并将类名设置为EventTableViewCell而不是UITableViewCell

或者,如果您以编程方式执行所有操作,请在cellForRowAtIndexPath中执行以下操作:

  var cell : EventTableViewCell? cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! EventTableViewCell? if cell == nil { cell = EventTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "eventCell") } return cell 

你确定你得到的单元格是EventTableViewCell一个实例吗? 您是否使用registerClass注册了自定义单元类registerClass:forCellReuseIdentifier:

如果您更改此代码:

 (cell as! EventTableViewCell).watchFrameChanges() 

对此:

 (cell as? EventTableViewCell)?.watchFrameChanges() 

你还得到例外吗?

另外,您使用GitHub示例中的相同故事板吗? 如果是这样,您是否更新了故事板以使用您的单元类名称并重用标识符? 您正在使用EventTableViewCell /“eventCell”,但原始代码使用PickerTableViewCell /“cell”。

正如@Greg Brown所说,解决方案是将单元格的类型更改为自定义单元格类:

 //wrong: self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "eventCell") //right: self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell")