【发布时间】:2017-12-01 14:09:09
【问题描述】:
考虑这段代码:
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
这是我从复制错误中得到的,这再次强化了 url 有问题:
error Error? (instance_type = 0x0000608000246930 -> 0x0000000106a2ff48 (void *)0x0000000106a2ff20: NSURLError) some
一个有效的网址是这个:
https://api.website.com/assets/P/wa/_resampled/picture.jpg
我的意思是显然这两个 URL 之间存在差异,但我可以向您保证,它们都可以在浏览器中工作并正确显示图像。
有人知道如何破译 NSURLError 或将其转换为某种可读格式吗?
如果没有,是否有人对 NSURL 可以使用的格式以及我们可能违反的格式制定了规范?
【问题讨论】:
-
Apple 框架抛出的任何
NSError实例都有domain、错误code和本地化描述(localizedDescription) -
下载图片不需要写代码。这是很棒的图书馆github.com/rs/SDWebImage。使用它!
-
@vadian 谢谢这实际上很有用,可能会让我们到达某个地方。
The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. -
@vadian Jup,这就是修复它的原因。谢谢大佬。
标签: swift nsurlsession nsurl