Ios 致命错误:在展开可选值(lldb)时意外发现nil

Ios 致命错误:在展开可选值(lldb)时意外发现nil,ios,swift,Ios,Swift,好的,我用AVFoundation扫描条形码。然后扫描后转到另一个视图。效果很好。但是,该应用程序会在随机时间崩溃。在相机预览仍然显示的情况下,这根本不起作用。我得到一个错误: 致命错误:在展开可选值时意外发现nil (lldb) 我相信这可能是因为它试图在未加载的情况下访问某些内容。如果我错了,请纠正我 所以,我要问的是,我该如何解决这个问题 如果有任何帮助的话,我也把线系上了 在Swift中,Optionals是一种特殊的通用类型: 可以包含一个值 或根本没有值(零) 当变量是可选变量时

好的,我用AVFoundation扫描条形码。然后扫描后转到另一个视图。效果很好。但是,该应用程序会在随机时间崩溃。在相机预览仍然显示的情况下,这根本不起作用。我得到一个错误:

致命错误:在展开可选值时意外发现nil (lldb)

我相信这可能是因为它试图在未加载的情况下访问某些内容。如果我错了,请纠正我

所以,我要问的是,我该如何解决这个问题

如果有任何帮助的话,我也把线系上了


在Swift中,Optionals是一种特殊的通用类型:

  • 可以包含一个值
  • 或根本没有值(零)
当变量是可选变量时,它只能为nil。您可以这样声明一个可选选项:

let meaningOfLife:Int? = 42
问号?类型声明末尾表示变量meaningOfLife是可选的。因此,此代码是正常的:

meaningOfLife = nil
变量meaningOfLife是可选的,因此可以为零

但是,此示例无效:

let age:Int = 99
age = nil // This line is not OK
因为年龄不是可选的,所以不能为零

选项是Swift的一个强大功能,因为它们使您的代码更安全,更不容易出错。因此,作为一名开发人员,optionals使您的工作效率更高,因为您在修复bug上花费的时间更少

几乎每种编程语言都有类似于nil的东西。它在JavaScript中未定义,在Java中为null,在PHP中为null。在这些语言中,为了避免没有值的变量出现运行时错误,必须记住检查变量是否为null。那是你可以忘记的

Swift以一种特殊的方式处理optionals:它强制开发人员检查变量是否为nil,如果它是可选的。这称为展开。您需要先打开可选文件,然后才能使用它

当你忘记打开一个可选文件时,你会在应用程序运行之前发现,这节省了你的时间。这使您的工作效率更高,代码中的错误更少

与其他语言不同,Swift将检查选项是否在编译时正确展开。因此,在应用程序运行之前,当编译代码时,Swift将检查代码中的每个可选项,并查看您是否正确地将其展开

不幸的是,编译器无法捕获某些错误。这时您将看到此错误

在以下情况下,当应用程序运行时会发生这种情况:

  • 您已使用强制打开可选的包装
  • 隐式展开的可选值为nil

在强制“展开可选”之前,请使用if语句检查可选是否为nil。当可选值为nil时,不执行曲括号{}内的代码。

是否已经添加了所有异常断点?如果没有,则执行此操作并查看错误抛出的位置。最有可能的情况是,在访问其内容时,您会发现一些可选项为“零”,但未选中带有感叹号的选项。@HermannKlecker抱歉,我对iOS开发相当陌生。你说的所有异常断点是指(!)?如果是,我将在哪里添加它如果你不发布代码,我们将无法帮助你。在断点导航器中,通过在+号上单击添加一个断点,然后选择一个异常断点。这将使您的应用程序在引发异常之前在调试器中停止。这样做,你就可以很容易地在大约98%的异常中找到根本原因。@JoshuaNozzi