【问题标题】:In ApplicationWillTerminate Viewcontroller is nil在 ApplicationWillTerminate Viewcontroller 中为 nil
【发布时间】:2017-05-21 06:31:54
【问题描述】:

在 ApplicationWillTerminate 的 AppDelegate 中,我创建了一个变量:

let firstVC = FirstViewController()
print(firstVC.lbl.text)

在我终止应用程序后,应用程序崩溃,因为“致命错误:在展开可选值时意外发现 nil”。在我做了一些检查之后,Viewcontroller 显然是 nil。

有人知道如何解决这个问题吗?

非常感谢

【问题讨论】:

  • 什么是 FirstViewController 以及为什么要在 ApplicationWillTerminate 中创建它?
  • Gagan_iOS 所说的加上我怀疑FirstViewController 是零。相反,我猜lbl 是一个未连接的插座,当您不从情节提要实例化 FirstViewController 或不从 NIB 加载它时。
  • 我正在尝试将 lbl.text 保存为 ApplicationWillTerminate 中的 UserDefault 并且没有连接插座。
  • 使用 if let 或 guard 以避免应用程序崩溃。

标签: swift3 xcode8 viewcontroller optional appdelegate


【解决方案1】:

就像我在评论中所说的那样,我无法想象 firstVC 是 nil,因为它的唯一方法是它的 init 是失败的,这是不可能的,因为你不能用一个失败的来覆盖 UIViewController.init()即使这样编译器也会抱怨你不得不说print(firstVC?.lbl.text)。这说明了 Swift 可选类型的美妙之处。

验证:print(firstVC.lbl) 应该打印 nil。仅当您从情节提要实例化 FirstViewController 或从 NIB 加载它时,连接插座的逻辑才会运行。

无论如何,如果您只是创建 FirstViewController 的新实例,这将不会反映用户对其元素“在屏幕上”所做的任何更改,但包括 lbl 在内的每个元素都会有其默认值。

可能的解决方案:

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 2020-05-11
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多