URLSession dataTask如何解密NSURLError?

时间:2017-06-28 09:27:27

标签: swift nsurlsession nsurl

考虑这段代码:

func load(url: URL?, callback: ((UIImage?) -> Void)? = nil) -> UIImage? {
    guard let url = url else {
      return nil
    }

    if let image = cache[url] {
        return image
    }
    guard let callback = callback else {
        return nil
    }
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    let config = URLSessionConfiguration.default
    config.timeoutIntervalForRequest = 10
    let session = URLSession(configuration: config, delegate: nil,         delegateQueue: OperationQueue.main)
    let task = session.dataTask(with: request) { data, response, error in
        guard let data = data else {
            return
        }
        DispatchQueue.global().async {
            let image = UIImage(data: data)
            DispatchQueue.main.async {
                self.cache[url] = image
                callback(image)
            }
        }
    }
    task.resume()
    return nil
}

我们遇到了一个问题,session.dataTask data返回为nil,错误是某种无法解读的NSURLError。调试它并没有给我任何有用的线索,问题可能是什么。我们已经能够确定某些URL有效,有些则没有,但不清楚问题所在。

有问题的网址是:

http://website.com////assets//P//wa//_resampled//paddedimage400400-apicture.gif

这是我从复制错误中得到的,这再次强化了网址出错:

error   Error?  (instance_type = 0x0000608000246930 -> 0x0000000106a2ff48 (void *)0x0000000106a2ff20: NSURLError)   some

有效的网址是:

https://api.website.com/assets/P/wa/_resampled/picture.jpg

我的意思是两个网址之间显然存在差异,但我可以向您保证,它们都可以在浏览器中运行并正确显示图像。

有人知道如何破译NSURLError或将其变成某种可读的格式吗?

如果没有,是否有人对NSURL可以使用的格式有规范,我们可能会违反这些格式?

2 个答案:

答案 0 :(得分:0)

您可以检查error是否为零,然后将其强制转换为NSError。

if let error = error {
    let nsError = error as NSError
    print(nsError.domain)
    print(nsError.code)
    print(nsError.localizedDescription)
    // ... check additional properties
}

答案 1 :(得分:0)

我能够使用localizedDescription来解读问题所在。然后这个The resource could not be loaded because the App Transport Security policy requires the use of a secure connection修复了它。