我正在将PFFile(图像)加载到表视图中,我想知道如何getDataInBackground
获取数组,而不浪费任何内容(内存或其他内容,我不知道)。这意味着以一种有效的方式从字面上将PFFile数组转换为UIImage数组。
我尝试过:
self.UIImagesArray.removeAll(keepingCapacity: false)
for i in 0..<self.imagesArray.count { // imagesArray is a PFFile array
imagesArray[i].getDataInBackground(block: { (data, error) in
if error != nil {
print(error?.localizedDescription)
} else {
if let imageData = data {
if let imageToDisplay = UIImage(data: imageData) {
self.UIImagesArray.append(imageToDisplay)
}
}
}
if self.imagesArray.count == self.UIImagesArray.count {
self.tableView.reloadData()
}
})
}
我相信我无法向您解释结果,因为我感觉我的UIImages数组是随机填充的,因此每次实现表格视图时,每个单元格的图片总是/大部分时间是不同的。
很高兴能获得帮助。
答案 0 :(得分:0)
您看到的顺序取决于每个图像下载所需的时间。您需要做的是将接收到的图像及其索引一起存储,然后在所有图像组装好之后,以正确的顺序将它们转换回数组:
self.UIImagesArray.removeAll(keepingCapacity: false)
for i in 0 .. <self.imagesArray.count { // imagesArray is a PFFile array
var imgDict = [Int: UIImage]()
imagesArray[i].getDataInBackground(block: { (data, error) in
if error != nil {
print(error?.localizedDescription)
} else {
if let imageData = data {
if let imageToDisplay = UIImage(data: imageData) {
imgDict[i] = imageToDisplay
}
}
}
if self.imgDict.count == self.imagesArray.count {
self.UIImagesArray = imgDict.keys.sorted().compactMap { imgDict[$0] }
self.tableView.reloadData()
}
})
}