使用Parse在后台下载多个文件

时间:2015-10-22 20:44:55

标签: ios swift parse-platform cloud background-process

我的问题:了解上次下载图片的最佳方式是什么,因为一旦下载了所有文件,我需要更新用户界面。

我正在从Parse下载一个PFFiles数组。我现在正在做的是:通过这种方式解析PFFiles数组

func getAllUserPictures(completion: (imageFiles: [PFFile]) -> Void) {
         guard let id = currentUserID else {
        return
    }

    let query = PFQuery(className: "Profile")
    query.whereKey("objectId", equalTo: id)
    query.includeKey("avatars")
    query.findObjectsInBackgroundWithBlock { profile, error in
        guard let imageFiles = profile?.first?.objectForKey("avatars") as? [PFFile] else {
            return
        }
        completion(imageFiles: imageFiles)
    }
}

从完成处理程序获取imageFile数组后,我会继续以这种方式下载它们:

func getUserPicturesWithBlock(completion: (result: [UIImage]) -> Void) {
    DataManager.sharedInstance.getAllUserPictures { imageFiles in
        for file in imageFiles {
            file.getDataInBackgroundWithBlock({ data, error in
                guard let data = data, let image = UIImage (data: data) else{
                    return
                }

                self.imagesArray.append(image)
            })
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您是否考虑过使用PFImageView框架中的多个ParseUI

您可以在查询完成时将每个PFFiles分配给PFImageView,然后在每个PFImageView上调用loadInBackgroundPFImageView类会在数据加载后自动处理更新图像,这也会在获取图像后立即更新每个图像,而不是等待所有图像一起使用。

或者,为了保持与现有结果类似的结构,您可以使用imageFiles数组的大小来判断它们何时被加载。在完成加载每个文件时,您可以检查加载的图像数是否等于数组的总大小。