在解开可选包时意外发现 nil,但变量有一个值



我正在制作一个简单的待办事项列表应用程序。我创建了一个带有标签和textview的自定义tableviewcell。标签用于标题,textview用于说明。当我尝试运行该应用程序时,它崩溃并给我以下错误:

线程 1:致命错误:解开可选值时意外发现 nil

错误被抛出在行上:

cell.taskTitle.text = task.title

但是上面一行的打印语句打印出"Optional("Task 1")". 这是为什么呢?

这是整个函数:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath)
as! TaskTableViewCell
let task = taskList[indexPath.row]
print(task.title)
cell.taskTitle.text = task.title
cell.taskDescription.text = task.description
return cell
}

谢谢!

编辑: 我的任务列表全局声明为:

var taskList: [Task] = [
Task(title: "Task 1", desc: "Task 1 desc"),
Task(title: "Task 2", desc: "Task 2 desc"),
Task(title: "Task 3", desc: "Task 3 desc")
]

我的任务类:

class Task {
var title: String?
var description: String?
init(title: String, desc: String) {
self.title = title
self.description = desc
}

}

这是因为你找错了地方。nil的不是task.title.这是cell.taskTitle.

当然,现在你可能想知道为什么会这样。这是因为您未正确配置单元出列机制。你没有展示你是如何做到这一点的,所以我们必须猜测。这里一个常见的错误是调用

tableView.register(TaskTableViewCell.self...

这实际上会阻止您的单元格从情节提要或 xib 文件加载,因此您的单元格的所有出口都nil。如果你的代码中有这样的一行,那么:

  • 如果单元格是在情节提要中设计的,请删除该行。

  • 如果您的单元格是在 xib 文件中设计的,请将该行替换为:

    tableView.register(UINib(nibName:"TaskTableViewCell", bundle:nil)...
    

首先,如果您使用一些命令(如"po"(来显示每个变量的值以查看它是否已创建,那就更好了 其次,我在 我使用了 willdispaly 函数,它是表视图的属性,它有很大的力量 它告诉你嘿,表视图单元格完成了加载,即将显示 还有什么您想在以这种方式显示它之前对其进行更改,您确定一切都构建良好且没有 nils

最新更新