我有这样的表视图:

当用户点击一行时,我要取消选中最后一行并选中选定的行。所以我这样写我的代码:
(例如,我的lastselected = 0)

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        var lastIndexPath:NSIndexPath = NSIndexPath(forRow: lastSelected, inSection: 0)
        var lastCell = self.diceFaceTable.cellForRowAtIndexPath(lastIndexPath) as! TableViewCell
        var cell = self.diceFaceTable.cellForRowAtIndexPath(indexPath) as! TableViewCell


        lastCell.checkImg.image = UIImage(named: "uncheck")

        cell.checkImg.image = UIImage(named: "check")

        lastSelected = indexPath.row

}

当我在不滚动的情况下轻按一行时,一切正常。我意识到,当我运行代码并立即滚动表并选择一行时。我的程序将因错误而崩溃:
“致命错误:解开可选值时意外发现nil”

该行显示错误:

我不知道这里有什么问题吗?

最佳答案

因为当您尝试选择不再位于屏幕中的某个单元格时您正在使用可重用单元格,因此该应用程序将崩溃,因为该单元格不再存在于内存中,请尝试以下操作:

if let lastCell = self.diceFaceTable.cellForRowAtIndexPath(lastIndexPath) as! TableViewCell{
    lastCell.checkImg.image = UIImage(named: "uncheck")
}
//update the data set from the table view with the change in the icon
//for the old and the new cell

如果单元格当前在屏幕中,则此代码将更新复选框。如果要重新使用单元格(dequeuereusablecellwithidentifier)当前不在屏幕上,则应在显示之前正确设置它。为此,您将需要更新表视图的数据集以包含更改。

关于ios - 滚动表格 View 后点击以选择行时,如何解决崩溃问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30972392/

10-12 02:35