dequeueReusableCellWithIdentifier上的Swift动态转换失败

时间:2015-04-06 00:14:40

标签: swift casting subclassing tableviewcell

我的tableViewController在我在表格中添加新项目后尝试将单元格转换为自定义的uitableviewcell子类时,得到此错误消息msg( Swift动态强制转换失败)。

这里有一些相关的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell: UITableViewCell

    if indexPath.section == 0 {
        cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
        cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")

        (cell as UITableViewCell).selectionStyle = UITableViewCellSelectionStyle.None
        (cell as UITableViewCell).textLabel!.text = "Some text"

        return (cell as UITableViewCell)

    } else if indexPath.section == 1 {

        cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as SymbolTableViewCell
        let symbol = notClosedSym[indexPath.row]
        (cell as SymbolTableViewCell).loadCell(symbol)

        return (cell as SymbolTableViewCell)
    } else {
        // similar to section 0

        return (cell as UITableViewCell)
    }
}

问题发生在我将新项目添加到列表并返回到tableView以及它何时尝试加载第1部分中的最后一行时。更确切地说,它发生在cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as SymbolTableViewCell

除了演员表失败的事实之外,有没有人可以猜到这里可能出现什么问题呢?

1 个答案:

答案 0 :(得分:0)

为什么不在if块中声明单元格变量,如...

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if indexPath.section == 0 {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as  UITableViewCell
        cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")

        (cell as UITableViewCell).selectionStyle = UITableViewCellSelectionStyle.None
        (cell as UITableViewCell).textLabel!.text = "Some text"

        return (cell as UITableViewCell)

    } else if indexPath.section == 1 {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as SymbolTableViewCell
        let symbol = notClosedSym[indexPath.row]
        (cell as SymbolTableViewCell).loadCell(symbol)
        return (cell as SymbolTableViewCell)
    } else {
        // similar to section 0
        return (cell as UITableViewCell)
    }
}

如果继续出现相同的错误,请仔细检查您的UITableViewCell子类。