2015-11-26 48 views
0

好吧,所以我使用AVFoundation来扫描条形码。然后一旦扫描到另一个视图。效果很好。但是,随机时间该应用会崩溃。相机预览仍然显示,只是不会工作。我得到的错误:致命错误:意外地发现零,同时展开一个可选值(lldb)

fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

我相信这可能是因为它试图访问的东西没有它被加载呢。纠正我,如果我错了。

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

如果有任何援助我也附加了线程。

image of thread

+0

您是否已经添加了所有异常断点?如果没有,那就这样做,看看错误发生在哪里。 很可能你会发现一些可选的零,而访问其内容未经检查与感叹号。 –

+0

@HermannKlecker对不起,我对iOS开发很新。所有例外断点你的意思是(!)?如果是这样的话我会添加它 –

+0

如果你不发布你的代码,我们不能帮你。 –

回答

0

在夫特,选配是一种特殊的通用类型:

  • 可以在所有(无)包含一个值
  • 或没有价值

变量可以只有当它是可选的时候才是零。你声明一个这样的可选项:

let meaningOfLife:Int? = 42 

问号?在类型声明的末尾表示变量meaningOfLife是可选的。因此,这个代码是OK:

meaningOfLife = nil 

变量meaningOfLife是可选的,因此它可以是零。

这个例子,但是,是无效的:

let age:Int = 99 
age = nil // This line is not OK 

因为年龄不是可选的,它不可能是零!

可选项是Swift的一个强大功能,因为它们使您的代码更安全,不易出错。因此,可选项使您作为开发人员更加高效,因为您在修复漏洞方面花费的时间更少。

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

Swift以特殊方式处理optionals:它迫使开发人员检查变量是否为零,如果它是可选的。这被称为解包。在使用它之前,你需要打开一个可选项。

当您忘记打开可选件时,您会发现应用程序在运行之前会为您节省时间。这会让你更有效率,而你的代码更少bug。

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

不幸的是,编译器无法捕捉到一些错误。那时你会看到这个错误。

,而你的应用程序正在运行,在下列情况下会出现这种情况:

  • 你力解开一个可选的!
  • 一个隐含解开可选为零

之前力展开可选的,你用if语句是否可选是零检查。如果可选为零,则不会执行波形括号{}内的代码。

相关问题