考虑这段代码:
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可以使用的格式有规范,我们可能会违反这些格式?
答案 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修复了它。