Swift:无法将“UITableViewCell”类型的值转换为自定义单元格类

时间:2015-09-23 00:31:06

标签: ios swift uitableview firebase

我正在研究iOS应用,它需要从Firebase提取数据并在表格视图中显示。为了给它一个自定义设计,我创建了一个自定义表视图单元类。当我试图在“populateCellWithBlock”方法中显示firebase返回的数据时,应用程序会崩溃,显示以下错误:

  

无法将'UITableViewCell'(0x10a73f9f0)​​类型的值转换为'EFRideSharing.RideTableViewCell'(0x108117f20)。

dataSource = FirebaseTableViewDataSource(ref: ref, cellReuseIdentifier: "rideCell", view: self.ridesTableView)

 dataSource.populateCellWithBlock
        { (cell,snapshot) -> Void in

            let tvc: RideTableViewCell = cell as! RideTableViewCell

            let snapshot: FDataSnapshot = snapshot as! FDataSnapshot

            tvc.toLabel.text = snapshot.value["time"] as? String


    }

任何想法如何使它工作?

更新:附加代码

class RideTableViewCell: UITableViewCell {

@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var toLabel: UILabel!
@IBOutlet weak var fromLabel: UILabel!


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}
}

1 个答案:

答案 0 :(得分:2)

FirebaseUI-iOS的作者。

由于UITableViewCell返回的单元格的默认类别为{{},因此问题是我们返回RideTableViewCell而不是FirebaseTableViewDataSource。 1}}当UITableViewCell属性未设置时。

您可以使用包含cellClass的构造函数的版本来解决此问题:

cellClass

这将允许我们将对象的适当演员版本返回给您。此外,为了解决在人口中静态知道细胞类型的问题,w可以做到以下几点。

在Objective-C中,这非常简单,因为我们可以给块中的属性赋予不同的类型:

dataSource = FirebaseTableViewDataSource(ref: ref, cellClass: RideTableViewCell.self, cellReuseIdentifier: "rideCell", view: self.ridesTableView)

因为我们使用[self.dataSource populateCellWithBlock:^(YourCustomCellClass *cell, FDataSnapshot *snap) { // Populate cell as you see fit }]; 作为可用的参数(__kindof UITableViewCell当没有,所以预先XCode 7),这种行为在任何版本的XCode中都有效,因为XCode将接受&#34 ;是的,这个类是UITableViewCell的一个子类" (> = XCode 7)或"如果它id我仍然可以向其发送消息,那么我将允许它" (< = XCode 6.4)。

斯威夫特是一个不同的故事。虽然你认为你应该能够这样做:

id

获得合理的预制版本的细胞。也就是说,我一直都会遇到错误,说方法签名与dataSource.populateCellWithBlock{ (cell: YourCustomClass, snapshot: FDataSnapshot) -> Void in // Populate cell as you see fit } AnyObject的比较不匹配,并将其与YourCustomClass的Apple问题相提并论,这是我所知道的记录最少的功能之一。如果有人对为什么会出现这种情况有任何想法,或者知道更好的文档,我很乐意听到它的来源(或者如果它在XCode 7的GM版本中得到修复)。