【问题标题】:Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value [duplicate]线程 1:致命错误:在隐式展开可选值时意外发现 nil [重复]
【发布时间】:2020-04-30 03:58:37
【问题描述】:

我的 Swift 程序因致命错误而崩溃,即使使用 GUARD 语句,也会说“Unexpectedly found nil while implicitly unwrapping an Optional value”。谁能帮忙告诉我为什么,我该如何解决?代码如下:

var page: Page? {
        didSet{
          guard let unwrappedPage = page else { return }
            NameLabel.text =  unwrappedPage.dishName
            Image.image = UIImage(named: unwrappedPage.imageName)
            contentText.text = unwrappedPage.ingredient
            contentText.text = unwrappedPage.instruction

        }
    }

【问题讨论】:

标签: swift fatal-error guard


【解决方案1】:

问题很可能是在您设置 page 时插座尚未连接,并且如果这些插座是隐式解包的选项(在类型名称后带有!,例如UILabel!),那将导致您描述的错误。例如,如果您在有问题的视图控制器出现并且所有插座都已连接之前设置了page,则此问题将显现出来。

所以,我建议:

  1. 对您的 @IBOutlet 引用使用可选链接,这样即使尚未连接出口也不会失败。

  2. 如果需要,请继续将您的didSet 观察者保持在page,但请确保您还更新了viewDidLoad 中的控件,以防在连接插座之前设置page

例如:

@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var imageView: UILabel!
@IBOutlet weak var ingredientLabel: UILabel!
@IBOutlet weak var instructionLabel: UILabel!

var page: Page? { didSet { updateControls(for: page) } }

override func viewDidLoad() {
    super.viewDidLoad()
    updateControls(for: page)
}

func updateControls(for page: Page?) {
    nameLabel?.text = page?.dishName
    imageView?.image = page.flatMap { UIImage(named: $0) }
    ingredientLabel?.text = page?.ingredient
    instructionLabel?.text = page?.instruction
}

注意,如果page 可能在视图呈现后(再次)被设置,您只需要这个didSet 观察者。如果没有,则不需要didSet 观察者。

【讨论】:

  • 顺便说一句,我已将控件重命名为遵循标准约定(以小写字母开头)。另外,我假设您不是要设置然后立即重置contentText。所以我假设你会有不同的控制。
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 2020-02-03
  • 2022-07-07
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
相关资源
最近更新 更多