ios - 按顺序异步下载图片

标签 ios swift asynchronous grand-central-dispatch imagedownload

我正在尝试下载图片,但重要的是我下载的图片必须按特定顺序排列。我正在使用以下代码下载图像:

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/

相关文章:

ios - 在 iOS 开发门户中创建配置文件时未显示推送证书

ios - 从 WebView 中的链接打开 Mobile Safari

ios - 使用 PropertyListSerialization 在 swift 2 中制作字典

ios - 从另一个文件快速访问变量

iphone - 如何在iPhone中使用图形API在照片上发表评论?

ios - 调用中的 NSDictionary 额外参数 "forKey"

ios - 检查具有不同对象的数组中的元素

ios - 在 objective-c 中使用异步代码避免嵌套 block

javascript - [object object] 无法确定并显示在控制台中

asynchronous - 使用 Proc::Async 从绑定(bind)管道中读取