Ios EXC_BAD_指令(代码=EXC_i386_INVOP,子代码=0x0)崩溃

Ios EXC_BAD_指令(代码=EXC_i386_INVOP,子代码=0x0)崩溃,ios,swift,api,Ios,Swift,Api,因此,在尝试访问API时,我的Swift代码中存在“NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)”错误的常见问题。但是,当我尝试将info.plist中的常见解决方法与NSAppTransportSecurity一起使用时,我得到了“EXC_BAD_指令(code=EXC_i386_INVOP,subcode=0x0)”。下面是我的代码,我一辈子都搞不懂这里发生了什么。如蒙协助,不胜感激 func get

因此,在尝试访问API时,我的Swift代码中存在“NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)”错误的常见问题。但是,当我尝试将info.plist中的常见解决方法与NSAppTransportSecurity一起使用时,我得到了“EXC_BAD_指令(code=EXC_i386_INVOP,subcode=0x0)”。下面是我的代码,我一辈子都搞不懂这里发生了什么。如蒙协助,不胜感激

func getMoviesNowPlayingData(page:Int, completion: (dict: [String:Any]) -> ()) {

    let urlString : String = "https://api.themoviedb.org/3/movie/now_playing?api_key=ebea8cfca72fdff8d2624ad7bbf78e4c&page=\(page)"
    let escapedUrlString = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
    let apiURL = NSURL(string:escapedUrlString!)

    let session = NSURLSession.sharedSession()

    session.dataTaskWithURL(apiURL!, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) in
        //NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) occurs here

        do {
            if let data2 = data {
                let jsonDict = try NSJSONSerialization.JSONObjectWithData(data2, options: NSJSONReadingOptions.MutableContainers) as! [String:Any]
                //EXC_BAD_INSTRUCTION (code=EXC_i386_INVOP, subcode=0x0) crash occurs here
                completion(dict: jsonDict)
            }
        } catch {
            //handle NSError
            print("error")
        }
    }).resume()
}

问题在于这句话说:

let jsonDict = try NSJSONSerialization.JSONObjectWithData(data2, options: NSJSONReadingOptions.MutableContainers) as! [String:Any]
强制转换,
as正在失败。如果可以的话,我不鼓励使用强制石膏。但是,至于失败的原因,JSON包含类类型,因此您应该使用
AnyObject
,而不是
Any
,例如:

guard let jsonDict = try NSJSONSerialization.JSONObjectWithData(data2, options: []) as? [String: AnyObject] else {
    print("not a dictionary")
    return
}

// use `jsonDict` here

在上面的一条评论中,您建议当您尝试将其强制转换到
NSDictionary
时,它也失败了。我建议您再试一次,因为如果JSON是一个字典,那么返回的对象是一个
NSDictionary
,这样cast就不会失败。我怀疑你试着那样做的时候还有其他问题

@Rob谢谢你指出这一点!我仍然掌握着在斯威夫特扮演角色的诀窍。JSON是一种标准的字典格式,Any和AnyObject之间有什么区别?不相关,但我不清楚为什么要使用可变容器,当您将其转换到您刚刚传递回来的Swift字典时。我建议使用
[]
作为
JSONObjectWithData
的选项。