【发布时间】:2018-08-10 19:08:42
【问题描述】:
我正在制作一个简单的待办事项列表应用程序。我创建了一个自定义tableviewcell,其中包含一个标签和一个textview。标签用于标题,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
}
谢谢!
编辑: 我的 taskList 全局声明为:
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
}
}
【问题讨论】:
-
我相信问题出在您对任务的定义中。你能展示你如何声明 taskList 以及你如何声明你的任务对象吗?
-
您可以将 Optional 视为另一个对象的容器对象,如果您使用 !运算符和 Optional 为 NIL 将导致运行时异常
-
您可能还想检查您的 TaskTableViewCell 定义,如果您的 IBOutlet 有!将它们替换为 ?或仔细检查这些插座是否正确连接。
-
如果属性在
init方法中被初始化为非可选,则不得将属性声明为可选。永远不要那样做。去掉问号。令人惊讶的是,代码确实可以编译,并且您的Optional("Task 1")意外行为消失了。 -
删除问号后我仍然遇到同样的错误。然而,打印语句现在打印“任务 1”
标签: ios swift uitableview