我试图从URL中获取一个JSON文件,并使用Swift返回内容。但是,代码在以下代码中的行let httpResponse = response as! NSHTTPURLResponse处失败。我在这一行得到一个异常,Xcode进入调试模式。
class func downloadJSONFile()->AnyObject
{
let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
var json:AnyObject = ""
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
do{
json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
}catch {
print("Error with Json: \(error)")
}
}
}
task.resume()
return json
}我怎么才能解决这个问题?
发布于 2016-03-08 22:37:52
有几个问题:
response将是nil,因此您试图强制转换它将导致致命错误。在处理网络响应时,不要使用强制展开/强制转换。json dispatch_async(dispatch_get_main_queue()) { //,如果您正在进行任何模型或UI更新,则将其分派回主队列} //,但不要在这里使用json,因为上面的操作异步运行。URLSession 9和更高版本中使用iOS时,它将不允许明文请求(即不允许"http“,默认情况下只有"https”)。通过向info.plist添加以下内容,您可以强制应用程序允许非https请求。有关更多信息,请参见https://stackoverflow.com/a/31254874/1271826
NSAppTransportSecurity NSExceptionDomains learnswiftonline.com NSIncludesSubdomains NSTemporaryExceptionAllowsInsecureHTTPLoads NSTemporaryExceptionMinimumTLSVersion TLSv1.1https://stackoverflow.com/questions/35876890
复制相似问题