Swift:非零可选值引发一个零例外

我有一个字典,值,我打电话来填充一个字段

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打印的值,无论如何在下一行我有一个可选的exceptionexception(甚至不使用默认的“”值)

我不明白我在这里做错了什么

这是一个文本字段的出口,但它似乎不preparefor在prepareForSegue函数

这个评论揭示了你的错误观念。 事情发生在一个顺序,我在这里讨论: https : //stackoverflow.com/a/29552710/341994

因此,通过devise, prepareForSegue发生新的视图控制器有其视图或其出口之前。 相反,它的网点连接的第一个时刻是它自己的viewDidLoad ,这是后来。

然而,你真正的错误是更深层次的。 一个视图控制器没有业务设置或与另一个视图控制器的网点交谈,从而操纵其接口。 相反,设置的东西,使目标视图控制器有一个普通的属性 ,你可以设置。 在viewDidLoad ,该视图控制器会检查该属性,检索该值,并通过其出口设置其自己的接口。

所以,总结一下: prepareForSegue是你初始化新视图控制器的机会。 但就是这些。 这个新的视图控制器稍后将控制它自己的视图 – 顾名思义! 它会从它自己的viewDidLoad和更高版本开始。