【问题标题】:Array of PFFile cast to UIImage is empty outside of for loop转换为 UIImage 的 PFFile 数组在 for 循环之外为空
【发布时间】:2017-05-08 12:09:01
【问题描述】:

我正在尝试将一些存储在解析服务器上的图像下载为 PFFile,然后将它们转换为 UIImage。这包含在 for 循环中,并且 UIImages 被附加到数组 tempImageArray。此数组填充在 for 循环中(包含服务器上的所有 9 个图像)但是当我尝试在 for 循环之外使用此数组时,数组为空,返回 []。

这是否与 getdatainbackground 和 swift 在我可以使用数组 tempImagesArray 之前跳过它有关?

整个区块的代码如下。

let packQuery = PFQuery(className: "Pack")

packQuery.findObjectsInBackground(block: { (objectsArray, error) in
    if error != nil {
        print(error!)
    } else if let packs = objectsArray {
        var tempImageArray = [UIImage]()
        for object in packs {
            if object.object(forKey: "file") != nil {
                var imageDataDownLoad = object["file"] as! PFFile
                    imageDataDownLoad.getDataInBackground(block: { (imageData, error) in
                        if error == nil {
                            if let image = UIImage(data: imageData!) {
                                tempImageArray.append(image)
                                print(tempImageArray)
                                // this returns a full array
                            }
                        }
                    })
            }
        }
        //self.packImage.append(tempImageArray)
        print(tempImageArray)
        //this returns []
        self.collectionView?.reloadData()
    }
  })

}

----------- 编辑 -------- 使用了 GitHub 上 parseUI 中的 PFImageView

packQuery.findObjectsInBackground(block: { (objectsArray, error) in
    if error != nil {
        print(error!)
    } else if let packs = objectsArray {

        for object in packs {

            let arrayName = object.object(forKey: "packName") as! String
            let arrayDescription = object.object(forKey: "packDesctription") as! String
            let arrayTitle = object.object(forKey: "packTitle") as! String
            let arrayImage = object.object(forKey: "file") as! PFFile

            self.packArray.append(packStruct(packName: arrayName, packDescription: arrayDescription, packTitle: arrayTitle, packImage: arrayImage))
        }
        self.collectionView?.reloadData()
    }
})

【问题讨论】:

  • "这是否与 getdatainbackground 和 swift 在我可以使用数组 tempImagesArray 之前跳过它有关?"你是完全正确的。查看stackoverflow.com/questions/28488867/…的建议
  • 谢谢,我最终解决了这个问题,并从 GitHub 上的 parseUI 项目中导入 PFImageView 类并使用它。尽管这也是一种解决方法,因为 cocoapod 版本不起作用,只需要导入单独的 .h 和 .m 文件即可使其工作。

标签: ios arrays swift parse-server pffile


【解决方案1】:
    packQuery.findObjectsInBackground(block: { (objectsArray, error) in
        if error != nil {
            print(error!)
        } else if let packs = objectsArray {

            for object in packs {

                let arrayName = object.object(forKey: "packName") as! String
                let arrayDescription = object.object(forKey: "packDesctription") as! String
                let arrayTitle = object.object(forKey: "packTitle") as! String
                let arrayImage = object.object(forKey: "file") as! PFFile

                self.packArray.append(packStruct(packName: arrayName, packDescription: arrayDescription, packTitle: arrayTitle, packImage: arrayImage))
            }
            self.collectionView?.reloadData()
        }
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2017-05-07
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多