一尘不染

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

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

我看不到我在做什么错


阅读 179

收藏
2020-07-07

共1个答案

一尘不染

它是文本字段的出口,但在prepareForSegue函数中似乎没有解包

那句话暴露出你的误解。事情按顺序发生,我在这里讨论:https
:
//stackoverflow.com/a/29552710/341994

因此,根据设计,prepareForSegue发生
新的视图控制器具有其视图或其出口之前。相反,连接插座的第一时间就是它自己的时间viewDidLoad,这是稍后的时间。

但是,您真正的错误更深。一个视图控制器 没有业务 设置,也 没有
与另一视图控制器的插座通信,因此无法操纵其界面。而是进行设置,以便目标视图控制器具有可以设置的普通 属性
。在中viewDidLoad,该视图控制器将检查该属性,检索值并通过其出口设置其 自己的 接口。

因此,总结一下:prepareForSegue是您初始化新视图控制器的机会。但是,仅此而已。然后,新的视图控制器将稍后控制其自己的视图-
顾名思义!它将在其自身viewDidLoad和以后开始。

2020-07-07