我正在使用Xcode6.01和Swift中的Master-Detail iOS项目。我有一个简单的数据输入屏幕,可以将swift字典对象添加到表的Swift数据源数组中。
数据输入和表格视图正常工作。当点击一个单元格,从数组中提取字典对象并尝试将该dict对象传递给详细视图时,我遇到了这个问题。
详细信息视图中的configureView()函数导致异常。这是代码:
func configureView() {
if let dictObject:Dictionary = detailItem as? Dictionary<String,String> {
if var strName = dictObject["name"] {
// prints fine:
println(strName)
// fatal error
self.detailDescriptionLabel.text = strName
// debug output:
// prints the string in strName (no mention of optional)
// assigning to label:
// fatal error: unexpectedly found nil while unwrapping an Optional value
}
}
}
看起来很奇怪println()语句对strName变量没有问题,并且没有提到它在输出面板中是可选的。一旦它尝试将字符串分配给标签,就会崩溃 - 崩溃。
答案 0 :(得分:0)
找到自己的答案。字典对象不是nil,而是视图中的标签!
使用标签的IF LET构造调整代码后,它的工作方式如下:
func configureView() {
if let dictObject:Dictionary = detailItem as? Dictionary<String,String> {
if let dLabel = detailDescriptionLabel {
dLabel.text = dictObject["name"]
}
if let eLabel = emailLabel {
eLabel.text = dictObject["email"]
}
}
}
我必须承认,但我不知道为什么需要这样做。我认为故事板会启动标签。有问题的标签是常规的IBOutlets:
@IBOutlet weak var detailDescriptionLabel: UILabel!
@IBOutlet weak var emailLabel: UILabel!