我的问题:了解上次下载图片的最佳方式是什么,因为一旦下载了所有文件,我需要更新用户界面。
我正在从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)
})
}
}
}
答案 0 :(得分:1)
您是否考虑过使用PFImageView
框架中的多个ParseUI
?
您可以在查询完成时将每个PFFiles分配给PFImageView,然后在每个PFImageView上调用loadInBackground
。 PFImageView
类会在数据加载后自动处理更新图像,这也会在获取图像后立即更新每个图像,而不是等待所有图像一起使用。
或者,为了保持与现有结果类似的结构,您可以使用imageFiles数组的大小来判断它们何时被加载。在完成加载每个文件时,您可以检查加载的图像数是否等于数组的总大小。