引用 TableView 单元格时出错

Error Refencing To a TableView Cell

我在设备上测试我的代码时遇到错误:fatal error: unexpectedly found nil while unwrapping an Optional value

我正在为 TableViewController 实现一些代码,从而在 touch/press 上突出显示某些 TableView 单元格。

我已将问题隔离到 'row 6',这是我的 TableView 的最后一行。当我注释掉这一行的代码时,代码运行完美。

我已经以编程方式(在 StoryBoard 中)将行数设置为 7。

我就是不明白为什么会出现这个错误。显然它无法打开最后一个单元格,但我不明白为什么。

这是我的代码:

注意:第 0 行和第 1 行(前两行)不是 'clickable',因此我的代码中未引用它们。

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 7
}

//Make TableView Cells Highlight On Touch Respectively.
override func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {

    let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))
    cell!.contentView.backgroundColor = UIColor(red: 170/255, green: 139/255, blue: 255/255, alpha: 1.0)


    let cell1  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))
    cell1!.contentView.backgroundColor = UIColor(red: 138/255, green: 231/255, blue: 36/255, alpha: 1.0)

    let cell3  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0))
    cell3!.contentView.backgroundColor = UIColor(red: 135/255, green: 190/255, blue: 255/255, alpha: 1.0)

    let cell4  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 5, inSection: 0))
    cell4!.contentView.backgroundColor = UIColor(red: 250/255, green: 236/255, blue: 67/255, alpha: 1.0)

    let cell5  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0))
    cell5!.contentView.backgroundColor = UIColor(red: 182/255, green: 181/255, blue: 182/255, alpha: 1.0)


}

override func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {

    let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))
    cell!.contentView.backgroundColor = .clearColor()

    let cell1  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))
    cell1!.contentView.backgroundColor = .clearColor()


    let cell3  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 4, inSection: 0))
    cell3!.contentView.backgroundColor = .clearColor()

    let cell4  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 5, inSection: 0))
    cell4!.contentView.backgroundColor = .clearColor()

    let cell5  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0))
    cell5!.contentView.backgroundColor = .clearColor()

}

提前感谢您抽出时间:-)

根据 cellForRowAtIndexPath 的 Apple 文档

Return 值 表示 table 的单元格的对象,如果单元格不可见或 indexPath 超出范围,则为 nil。

您在方法中创建实例变量以引用单元格并在下一行中强制展开它们。您尝试强制展开的最后一个单元格可能不可见,并且该方法返回 nil,因为该单元格不存在/该行的单元格尚未出队。

如果您确实希望所有单元格都改变颜色,您可能想要使用 if let 语句来防止出现空单元格,或者如果您只想更改一个单元格的颜色,则需要使用 switch 语句。

几乎不惜一切代价避免强制解包!

if let cell5  = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 6, inSection: 0)){
    cell5.contentView.backgroundColor = UIColor(red: 182/255, green: 181/255, blue: 182/255, alpha: 1.0)
}