如何在加载数据后安全地展开表视图单元格

时间:2016-02-11 03:37:45

标签: ios swift tableviewcell

这是我ViewController.swift注意到的错误输出行。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!

    var sections: [Section] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        SectionsData().getSectionsFromData({
            sections in

            self.sections = sections

            self.tableView.reloadData()
        })
    }
...
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        // Next line errors out: unexpectedly found nil while unwrapping an Optional value
        let cell = tableView.cellForRowAtIndexPath(indexPath) as! TableViewCell

        cell.titleLabel!.text = sections[indexPath.section].objects[indexPath.row].name
        cell.datetimeLabel!.text = sections[indexPath.section].objects[indexPath.row].date

        return cell
    }
...

TableViewCell.swift样式Custom,单元格标识符为cell

import UIKit

class TableViewCell: UITableViewCell {

    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var datetimeLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

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

}

所以tableView.cellForRowAtIndexPath(indexPath)可能由于数据尚未准备好显示而给出nil。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这实际上不是一个解缠的问题。您不小心使用了cellForRowAtIndexPath而不是dequeueReusableCellWithIdentifier:indexPath

let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as? TableViewCell

@Eendje所述,请确保在Interface Builder中注册您的单元标识符。只需查看您的故事板,单击单元格并在Interface Builder中更新您的标识符。

enter image description here