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)
为了访问一个可选的值(如果有一个的话),你需要展开它。可选值可以安全或强制解包。如果你强制解开一个可选项,并且它没有值,你的程序将会崩溃并显示上述消息。
这个崩溃可以用两种不同的力展开的发生:
1.明确强制解缠
这与done!操作员可选。
例如:
let anOptionalString: String?
print(anOptionalString!) // <- CRASH
由于anOptionalString
是nil
在这里,你会得到你在哪里迫使展开它的行崩溃。
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文件中的连接是否正确,否则这些值在运行时将为零,因此在隐式解开。
非常感谢,现在正在工作。再次感谢! – LeonSaber
只需发布包含发生错误的行的部分 – Tj3n
任何感叹号都可能导致错误。其中一个标签的文本属性很可能是'nil'。 – vadian
我已更新我的代码,请检查,非常感谢。 – LeonSaber