Swift iOS - 将字典对象传递给详细视图

时间:2014-10-08 11:39:08

标签: ios arrays dictionary swift optional

我正在使用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变量没有问题,并且没有提到它在输出面板中是可选的。一旦它尝试将字符串分配给标签,就会崩溃 - 崩溃。

1 个答案:

答案 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!