我正在尝试下载图片,但下载的图片按特定顺序排列至关重要。我使用以下代码下载图像:
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)
})
答案 0 :(得分:1)
您无法控制下载顺序,无论您创建URL对象的顺序如何,都将对同一服务器的所有请求进行流水线操作。此外,某些URL可能会被缓存,而其他URL可能需要转到远程服务器。你需要做的是维护一个包含url到实际数据映射的可变数组或字典,然后等待所有url完全下载,然后按已知顺序迭代。
答案 1 :(得分:0)
最简单的方法是,您可以在下载后使用其网址保存Dictionary
中的每个图片。像var imageData = [String: NSData]()
一样。稍后您可以对其进行排序或按键(url)使用它。