Ios EXC_BAD_指令(代码=EXC_i386_INVOP,子代码=0x0)崩溃
因此,在尝试访问API时,我的Swift代码中存在“NSURLSession/NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)”错误的常见问题。但是,当我尝试将info.plist中的常见解决方法与NSAppTransportSecurity一起使用时,我得到了“EXC_BAD_指令(code=EXC_i386_INVOP,subcode=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
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
的选项。