从解析中下载多个(4< 4< PFFile)并使它们保持同步到正确的数组中

时间:2015-10-15 17:17:30

标签: ios swift asynchronous parse-platform

所以我有一个用户名和一些来自parse.com的FFile

类)图像类

  • B)专栏:PFFile)imageOne
  • C)专栏:PFFile)imageTwo
  • D)专栏:PFFile)imageThree
  • E)专栏:PFFile)imageFour
  • F)专栏:PFFile)imageFive
  • G)专栏:PFFile)imageSix

如何将它们一起下载,同时保持它们在阵列中的正确顺序或索引? 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,这不是一个好的体验。

有更好的方法吗?

1 个答案:

答案 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