Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”

Posted

技术标签:

【中文标题】Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”【英文标题】:Swift UITableViewCell detailTextLabel.text throws error 'fatal error: Can't unwrap Optional.None' 【发布时间】:2014-06-12 17:18:03 【问题描述】:

这是我生成表格视图的 Swift 代码。我正在尝试设置一个带有详细标签的 tableView。我认为问题的产生是因为

if (cell == nil) 
            println("1")
            cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "CellSubtitle")
            //cell = tableViewCell
        

永远不会被调用,因此单元格永远不会使用UITableViewCellStyle.Subtitle 样式初始化。这是该方法所需的代码:

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

    println("start TableViewCellForRowAtIndexPath")
    var cell: UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("CellSubtitle") as UITableViewCell
    if (cell == nil) 
        println("1")
        cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "CellSubtitle")
        //cell = tableViewCell
    

    cell.textLabel.text = instructions[indexPath.row].text
    println("2")
    //cell.detailTextLabel
    cell.detailTextLabel.text = "HI"
    println("3")

这是该方法的控制台输出:

start load
1
2
done load
start TableViewCellForRowAtIndexPath
2
fatal error: Can't unwrap Optional.None
(lldb) 

如何初始化detailTextLabel 以插入文本?当我尝试为标签设置文本时,我收到fatal error: Can't unwrap Optional.None。为什么我会收到此错误?

单元格不是在故事板中创建的。我使用tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "CellSubtitle") 初始化了单元格或注册了它的类

【问题讨论】:

【参考方案1】:

我假设您在情节提要中制作了自己的单元格,所以这就是为什么永远不会调用“if”子句的原因。您只需在情节提要的检查器中将单元格的样式更改为“字幕”(并删除该 if 子句)。

【讨论】:

我没有在故事板中制作单元格。我正在使用tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "CellSubtitle") 初始化单元格 @jbman223,使用该方法只会为您提供“基本”类型的单元格。只需删除该行,然后您的代码应该可以工作,因为初始出列将返回一个 nil 单元格,这将导致您的 if 子句被输入。 @jbman223,这行得通吗?仅当我将 dequeue 方法中的“as UITableViewCell”更改为“as UITableViewCell!”时,它才对我有用,否则我会收到错误消息。【参考方案2】:

根据我目前的经验,因为 detailTextLabel 是可选的,所以你必须这样输入:

cell.detailTextLabel?.text = "whatever"

但是,上面的人是对的,去掉 registerClass 行。我不使用那个,我还不确定它的用途。

【讨论】:

它对我有用。那是因为我使用了故事板,不应该需要 self.tableView.registerClass()。

以上是关于Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”的主要内容,如果未能解决你的问题,请参考以下文章

从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?

第10月第1天 storyboard uitableviewcell

动态改变 UITableViewCell 高度 - Swift 4

UITableViewCell中的Swift ScrollView不滚动

Swift - UITableViewCell倒计时重用解决方案

Swift - 如何将数据从 UITableViewCell 类传递到 UIViewController