按顺序异步下载图片
Downloading Images Asynchronously in Sequence
我正在尝试下载图片,但我下载的图片必须按特定顺序排列,这一点至关重要。我正在使用以下代码下载图片:
func downloadImage(url: NSURL, completionHandler: (response: UIImage) -> ()){
print("Started downloading \"\(url.URLByDeletingPathExtension!.lastPathComponent!)\".")
manager.getDataFromUrl(url) { (data, response, error) in
dispatch_async(dispatch_get_main_queue()) { () -> Void in
guard let data = data where error == nil else { return }
print("Finished downloading \"\(url.URLByDeletingPathExtension!.lastPathComponent!)\".")
completionHandler(response: UIImage(data: data)!)
}
}
}
我正在使用此代码调用 downloadImage
self.downloadImage(NSURL(string: self.url)!, completionHandler: { response in
dispatch_async(dispatch_get_main_queue()) {
self.images.append(response)
}
})
问题是图片以正确的顺序开始下载,但响应却不正确(这显然是因为图片的大小不同,而且下载速度更快)。所以发生的事情是所有图像开始下载,先到者附加到 images : [UIImage]
数组。我怎样才能使 images
数组中的图像有序?
我也试过在调用 downloadImage
函数时删除主块
self.downloadImage(NSURL(string: self.url)!, completionHandler: { response in
self.images.append(response)
})
您无法控制下载顺序,因为无论您在其中创建 URL 对象的顺序如何,对同一服务器的所有请求都将通过管道传输。另外,一些 URLs可能被缓存,而其他人可能需要去远程服务器。您需要做的是维护一个包含 url 到实际数据映射的可变数组或字典,然后等到所有 url 都已完全下载,然后以已知顺序迭代。
最简单的方法是下载后将Dictionary
中的每张图片连同它们的url一起保存。喜欢var imageData = [String: NSData]()
。稍后您可以对其进行排序或按键使用(url).
我正在尝试下载图片,但我下载的图片必须按特定顺序排列,这一点至关重要。我正在使用以下代码下载图片:
func downloadImage(url: NSURL, completionHandler: (response: UIImage) -> ()){
print("Started downloading \"\(url.URLByDeletingPathExtension!.lastPathComponent!)\".")
manager.getDataFromUrl(url) { (data, response, error) in
dispatch_async(dispatch_get_main_queue()) { () -> Void in
guard let data = data where error == nil else { return }
print("Finished downloading \"\(url.URLByDeletingPathExtension!.lastPathComponent!)\".")
completionHandler(response: UIImage(data: data)!)
}
}
}
我正在使用此代码调用 downloadImage
self.downloadImage(NSURL(string: self.url)!, completionHandler: { response in
dispatch_async(dispatch_get_main_queue()) {
self.images.append(response)
}
})
问题是图片以正确的顺序开始下载,但响应却不正确(这显然是因为图片的大小不同,而且下载速度更快)。所以发生的事情是所有图像开始下载,先到者附加到 images : [UIImage]
数组。我怎样才能使 images
数组中的图像有序?
我也试过在调用 downloadImage
函数时删除主块
self.downloadImage(NSURL(string: self.url)!, completionHandler: { response in
self.images.append(response)
})
您无法控制下载顺序,因为无论您在其中创建 URL 对象的顺序如何,对同一服务器的所有请求都将通过管道传输。另外,一些 URLs可能被缓存,而其他人可能需要去远程服务器。您需要做的是维护一个包含 url 到实际数据映射的可变数组或字典,然后等到所有 url 都已完全下载,然后以已知顺序迭代。
最简单的方法是下载后将Dictionary
中的每张图片连同它们的url一起保存。喜欢var imageData = [String: NSData]()
。稍后您可以对其进行排序或按键使用(url).