ios - 如何使用 getDataInBackground 将整个 PFFile 数组转换为 UIImage 数组

标签 ios swift

我正在将 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/

相关文章:

ios - 如何在 iOS 7 和 iOS 8 上正确自定义 UITabBar 和 UITabBarItem?

iOS FCM 推送通知无法快速在后台状态下工作?

ios - 具有自定义单元格的表格 View 在滚动时会重复

ios - 将内容左对齐 - SwiftUI iOS 14 Widget

ios - 刽子手计划

ios - UICollectionView didDeselectItemAt 没有被触发

json - 类型 'JSON' 的值没有成员 'arrayOf'

ios - 在选择 Cell 时在 UITableView 中显示 UIButton

ios - 如何使用 writeToFile 将图像保存到文档目录中?

ios - 根据用户航向更新 iOS map