我正在将 PFFile(图像)加载到 TableView 中,我想知道如何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 数组是随机填充的,所以每次我实现我的表格 View 时,每个单元格的图片总是/大多数时候都是不同的。
我很高兴能得到一些帮助。
最佳答案
您看到的顺序取决于下载每个图像所需的时间。您需要做的是将接收到的图像及其索引存储起来,然后在组装完所有图像后,将它们按正确的顺序转换回数组:
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()
}
})
}
关于ios - 如何使用 getDataInBackground 将整个 PFFile 数组转换为 UIImage 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55658683/