这种方法有问题;得到“致命错误:在解开可选值时意外发现nil”错误。
func configureCheckmarkForCell(cell: UITableViewCell, withChecklistItem item:ChecklistItem) {
let label = cell.viewWithTag(1001) as! UILabel
if item.checked {
label.text = "√"
} else {
label.text = ""
}
}
如何修复此问题以防止崩溃? 我有另一种类似的方法,并且具有一个可拆卸的力量,它不会造成麻烦:
func configureTextForCell(cell: UITableViewCell, withChecklistItem item:ChecklistItem) {
let label = cell.viewWithTag(1000) as! UILabel
label.text = item.text
}
答案 0 :(得分:2)
崩溃的路线很明显:
add-money
崩溃有两个原因:
请检查您的设计:
确保通过此方法传递的所有单元格都有一个标记为1001的关联视图,此视图为UILabel。
如果不可能,请使用Gerd Castan答案中描述的可选绑定
Swift语言鼓励开发人员在设计或编译时解决这些问题,通过删除所有可有可无的类型检查来使代码更高效
答案 1 :(得分:0)
尝试这样的事情:
func configureTextForCell(cell: UITableViewCell, withChecklistItem item:ChecklistItem) {
if let view = cell.viewWithTag(1000) {
if let label = view as? UILabel {
label.text = item.text
} else {
print ("view is of type \(view.classForCoder)")
}
}
}
它不会崩溃,并会在你对你的课程的假设错误时告诉你。
答案 2 :(得分:0)
您可能已将标签放入错误的单元格(在故事板中)。如其他答案中所述,单元没有带有标记的视图。
实施例: 如果您有一个带有“概览”单元格的视图和带有“详细视图”单元格的另一个视图,您可能已将标签放入“详细视图”,尽管它需要在“概述”中(反之亦然。)