所以我有一个用户名和一些来自parse.com的FFile
类)图像类
如何将它们一起下载,同时保持它们在阵列中的正确顺序或索引? Asyncro真的和我混在一起,我无法绕过它。有些图像比其他图像花费的时间更长。
我可以使用
imageOne.getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
let imageOne = UIImage(data:imageData)
self.imageOneArray.append(imageOne)
}
}
//repeat
//imageTwo.getData...
//imageThree.getData...
//imageFour.getData...
//imageFive.getData...
...etc.
但是它的作用是,它会在不同的时间下载它们,因为它在后台执行。然后当我想在我的tableview中显示它们时。它出了故障。
我尝试过的。 我下载了FFile,然后将NSData转换为cellForRowAtIndexPath中的UIImages,但它是滞后的,因为当我向上或向下滚动时,它总是将NSData转换为UIImage,这不是一个好的体验。
有更好的方法吗?
答案 0 :(得分:1)
您只需要同步加载所有图像,但同时使用调度组:
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let group = dispatch_group_create()
//////////////////////////////// Download block
dispatch_group_async(group, queue) { () -> void in
// load your image here synchronously (use getData instead of getDataInBackgroundWithBlock)
// then when you downloaded it, insert it at the correct array index
}
//////////////////////////////////
// repeat above block for each image you have
// wait for all of them to finish
dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
// Here you can access your downloaded image array which must be in the correct order