No se pudo convertir el valor del tipo 'UITableViewCell' en 'AppName.CustomCellName'

Estoy tratando de crear una celda personalizada que se expande al toque. Estoy usando este ejemplo de github: https://github.com/rcdilorenzo/Cell-Expander

Esta línea da el error de time de ejecución 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). } 

También comprobé la respuesta de esta publicación, seguido de tres pasos, pero sin suerte: no se pudo convertir el valor del tipo 'UITableViewCell' a '(AppName). (CustomCellName)'

Mi class de celda personalizada se ve así:

 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 } } 

Por favor ayuda.

"Tengo self.tableView.registerClass (UITableViewCell.self, forCellReuseIdentifier:" eventCell ") en mi vistaDidLoad"

Es probable que anule el valor que estableció en el guión gráfico. Intente eliminar esta línea o cámbiela a self.tableView.registerClass(EventTableViewCell.self, forCellReuseIdentifier: "eventCell") .

En el guión gráfico, click la celda y establezca el nombre de la class en EventTableViewCell en lugar de UITableViewCell

O si está haciendo todo de forma programática, en cellForRowAtIndexPath, haga esto:

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

¿Estás seguro de que la celda que EventTableViewCell es una instancia de EventTableViewCell ? ¿Registró su class de celda personalizada con registerClass:forCellReuseIdentifier: 😕

Si cambia su código de este:

 (cell as! EventTableViewCell).watchFrameChanges() 

a esto:

 (cell as? EventTableViewCell)?.watchFrameChanges() 

¿Aún tienes la exception?

Además, ¿estás usando el mismo guión gráfico del ejemplo de GitHub? Si es así, ¿actualizó el guión gráfico para usar el nombre de la class celular y el identificador de reutilización? Está utilizando EventTableViewCell / "eventCell", pero el código original utilizó PickerTableViewCell / "cell".

Como dijo @Greg Brown, la solución era cambiar el tipo de celda a la class de celda personalizada:

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