我有一本有值的字典,我叫它来填充一个字段
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可选异常(甚至不使用默认的“”值)
我看不到我在做什么错
它是文本字段的出口,但在prepareForSegue函数中似乎没有解包
那句话暴露出你的误解。事情按顺序发生,我在这里讨论:https : //stackoverflow.com/a/29552710/341994
因此,根据设计,prepareForSegue发生 在 新的视图控制器具有其视图或其出口之前。相反,连接插座的第一时间就是它自己的时间viewDidLoad,这是稍后的时间。
prepareForSegue
viewDidLoad
但是,您真正的错误更深。一个视图控制器 没有业务 设置,也 没有 与另一视图控制器的插座通信,因此无法操纵其界面。而是进行设置,以便目标视图控制器具有可以设置的普通 属性 。在中viewDidLoad,该视图控制器将检查该属性,检索值并通过其出口设置其 自己的 接口。
因此,总结一下:prepareForSegue是您初始化新视图控制器的机会。但是,仅此而已。然后,新的视图控制器将稍后控制其自己的视图- 顾名思义!它将在其自身viewDidLoad和以后开始。