我正在尝试下载图片,但重要的是我下载的图片必须按特定顺序排列。我正在使用以下代码下载图像:
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
函数时删除主 block
self.downloadImage(NSURL(string: self.url)!, completionHandler: { response in
self.images.append(response)
})
最佳答案
您无法控制下载顺序,因为无论您创建 URL 对象的顺序如何,对同一服务器的所有请求都将通过管道传输。此外,某些 URL 可能会被缓存,而其他 URL 可能需要转到远程服务器。您需要做的是维护一个包含 url 到实际数据映射的可变数组或字典,然后等到所有 url 都已完全下载,然后以已知顺序迭代。
关于ios - 按顺序异步下载图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212022/