2016-11-22 76 views
0

我的代碼有錯誤,但我不知道我的代碼有什麼問題,請給我一些幫助,非常感謝。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

回答

0

爲了訪問一個可選的值(如果有一個的話),你需要展開它。可選值可以安全或強制解包。如果你強制解開一個可選項,並且它沒有值,你的程序將會崩潰並顯示上述消息。

這個崩潰可以用兩種不同的力展開的發生:

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

相關問題