IOS我的代码有什么问题?得到了“线程1:EXC_BAD_指令(代码= EXC_I386_INVOP,子代码= 0x0)”

IOS我的代码有什么问题?得到了“线程1:EXC_BAD_指令(代码= EXC_I386_INVOP,子代码= 0x0)”

问题描述:

我的代码有错误,但我不知道我的代码有什么问题,请给我一些帮助,非常感谢。IOS我的代码有什么问题?得到了“线程1:EXC_BAD_指令(代码= EXC_I386_INVOP,子代码= 0x0)”

Thread 1: EXC_BAD_ INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0) Error "fatal error: unexpectedly found nil while unwrapping an Optional value"

我的代码是:

let insertSQL = "INSERT INTO CONTACTS (location, reason, descri) VALUES ('\(location.text!)', '\(reason.text!)', '\(descri.text!)')" //Thread 1: EXC_BAD_ INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0) 
+0

只需发布包含发生错误的行的部分 – Tj3n

+0

任何感叹号都可能导致错误。其中一个标签的文本属性很可能是'nil'。 – vadian

+0

我已更新我的代码,请检查,非常感谢。 – LeonSaber

为了访问一个可选的值(如果有一个的话),你需要展开它。可选值可以安全或强制解包。如果你强制解开一个可选项,并且它没有值,你的程序将会崩溃并显示上述消息。

这个崩溃可以用两种不同的力展开的发生:

1.明确强制解缠

这与done!操作员可选。

例如:

let anOptionalString: String? 
print(anOptionalString!) // <- CRASH 

由于anOptionalStringnil在这里,你会得到你在哪里迫使展开它的行崩溃。

2.隐式无包装选配

这些是使用!限定,而不是类型后?

var optionalDouble: Double! // this value is implicitly unwrapped wherever it's used 

这些可选项假定包含一个值。因此,无论何时访问隐式解包的可选项,它都会自动为您解压缩。如果它不包含值,则会崩溃。

print(optionalDouble) // <- CRASH 

为了找出哪个变量导致崩溃,你可以拿着同时单击显示的定义,在这里你可以找到可选类型。

for more details go through this image

IBOutlets,特别地,通常是隐式地展开自选。这是因为在初始化之后,xib或storyboard会在运行时连接插座。因此,您应该确保在加载之前不要访问插座。还应该检查storyboard/xib文件中的连接是否正确,否则这些值在运行时将为零,因此在隐式解开。

+0

非常感谢,现在正在工作。再次感谢! – LeonSaber