Swift:非零可选值引发零异常

时间:2015-04-18 01:18:17

标签: ios swift optional

我有一本字典,带有值,我称之为填充字段

  if let userdata: NSDictionary = self.fbdata {
    println(userdata["email"]) // print Optional(email@domain.com)
    vc.email.text = userdata["email"] as? String ?? "" // raise a nil error
  }

如代码中所示,userdata [“email”]存在并且有一个值,由println打印,无论如何在下一行我有一个nil可选异常引发(甚至默认的“”值也没有使用)

我不知道我在这里做错了什么

1 个答案:

答案 0 :(得分:4)

  

它是文本字段的出口,但它似乎没有打开prepareForSegue函数

该评论揭示了您的误解。事情发生在订单中,我在这里讨论:https://stackoverflow.com/a/29552710/341994

因此,按照设计,prepareForSegue在新视图控制器具有其视图或其出口之前发生。相反,它的出口连接的第一个时刻是它自己的viewDidLoad,这是后来的。

然而,你真正的错误是更深层次的。一个视图控制器具有无业务设置或与另一个视图控制器的插座通话,从而操纵其接口。而是进行设置,以便目标视图控制器具有您可以设置的普通属性。在viewDidLoad中,该视图控制器检查该属性,检索该值,并通过其出口设置其自己的接口。

所以,总结一下:prepareForSegue是你初始化新视图控制器的机会。但这就是全部。然后,新的视图控制器将控制自己的视图 - 顾名思义!它将从自己的viewDidLoad开始,然后再开始。