Json错误EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

时间:2018-01-07 21:37:30

标签: ios url app-transport-security

亲爱的

我正在使用此代码

var Locations = [LocationListStats]()

func downloadJSON(completed: @escaping () -> ()) {

    let url = URL(string: "http://teslm.net/app/LocationList.php")

    URLSession.shared.dataTask(with: url!) { (data, response, error) in
        do {
            self.Locations = try JSONDecoder().decode([LocationListStats].self, from: data!)        
            DispatchQueue.main.async {
                completed()
            }
        }catch {
            print("JSON Error")
        }
    }.resume()
}

但是我收到此错误:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)

但如果我使用其他网址,它没有任何错误。 所以你认为我的代码在这里有问题,或者我应该在后端用我的Json文件做些什么?

错误在这一行:

self.Locations = try JSONDecoder().decode([LocationListStats].self, from: data!)

如果我打印错误,它会给我这个:

  

无法加载资源,因为App Transport Security策略要求使用安全连接

我在我的plist文件中使用它来尝试解决这个问题,但同样的事情:

    <key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>http://teslm.net/app/LocationList.php</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    </dict>
</dict>

我认为这个问题与我正确的HTTPS协议有关吗?

1 个答案:

答案 0 :(得分:0)

您的例外情况不正确。 NSExceptionDomain应该只是域名。您还需要添加例外以允许不安全的连接。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>teslm.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    </dict>
</dict>

请注意,Apple已声明在将来的某个时候,您必须提供理由来说明您需要这些例外的原因。如果您拥有teslm.net服务器,您应该使用它来支持安全连接,包括ATS的所有要求。