2016-01-23 109 views
1

我正在學習使用遠程sql進行註冊。我只要求用戶輸入電子郵件地址和密碼,然後按「註冊」按鈕。註冊信息將被存儲在遠程數據庫中。該應用程序構建成功。但是,當我輸入電子郵件地址和密碼時,應用程序停在句子處。使用JSON,mysql和php的用戶註冊問題:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)

let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

說,它有

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). 

錯誤我也看看輸出

"fatal error: 'try!' expression unexpectedly raised an error: 
Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo= 
{NSDebugDescription=No value.}: file 
/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang- 
700.1.101.15/src/swift/stdlib/public/core/ErrorType.swift, line 50 (lldb) ". 

我不知道該如何處理它。請幫忙。謝謝。

+0

什麼樣的數據?如果它無效,你會得到這個錯誤json – dan

+0

謝謝丹。考慮零和錯誤情況總是很好的。 – swiftlearne

+0

'「沒有值。」'意味着'data'是空的,而不是'nil'。如果'data'爲'nil',你會得到['致命錯誤:意外地發現零,而解包可選值'](http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly -found-NIL-而-解包-AN-可選-VALU)。相關:http://stackoverflow.com/questions/36462298/error-domain-nscocoaerrordomain-code-3840-no-value-userinfo-nsdebugdescripti – ma11hew28

回答

1

當您使用帶有驚歎號的try時,您告訴編譯器您不關心錯誤,並且既然您已經這樣做了,那麼當您嘗試強制轉換您的數據時,會發生錯誤而不是進入catch塊來告訴你錯誤是什麼。要做到這一點安全,並找出潛在的錯誤,你應該這樣做,而不是:

do { 
    let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 
} catch (_) { 
    //here you can get access to all of the errors that occurred when trying to serialize 
} 

做任何的這雖然之前,你應該做一個簡單的檢查,看看if data != nil { /**try to serialize here*/ }

+0

感謝pbush25,你是對的。在我改爲do/catch模式之後。現在它可以工作。所以嘗試使用do/catch總是很好的,不只是懶得使用try! – swiftlearne

+0

是的,這就是爲什麼蘋果將它添加到語言!如果你發現我的答案適合你,請投票並接受:) – pbush25

+0

謝謝pubsh25。我已經投了票。 – swiftlearne

相關問題