Swift 使用JSON、mysql和php的用户注册问题:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)

Swift 使用JSON、mysql和php的用户注册问题:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0),swift,Swift,我正在学习使用远程sql进行注册。我只要求用户输入电子邮件地址和密码,然后按“注册”按钮。注册信息将存储在远程数据库中。应用程序已成功生成。但是,当我输入电子邮件地址和密码时,应用程序会在句子处停止 let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 说它有错误 EXC_BAD_INSTRUCTION (code=EXC_

我正在学习使用远程sql进行注册。我只要求用户输入电子邮件地址和密码,然后按“注册”按钮。注册信息将存储在远程数据库中。应用程序已成功生成。但是,当我输入电子邮件地址和密码时,应用程序会在句子处停止

    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) ". 

我不知道怎么处理它。请帮忙。谢谢。

当您使用带有感叹号的
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{/**尝试在此处序列化*/}

您的数据是什么?如果JSONTANK Dan无效,您将得到该错误。考虑NIL和错误情况总是好的。<代码>“没有值”。<代码>意味着<代码>数据< /代码>是空的,而不是<代码> nIL/COD>。如果
数据
,则您将得到。相关报道:谢谢pbush25,你说得对。在我换了做/接球模式之后。现在它起作用了。因此,使用do/catch进行尝试总是好的,而不仅仅是懒得使用try!是的,这就是为什么苹果将其添加到语言中!如果你发现我的答案对你有用,请投票并接受它:)