PFFile 作为 UIImageView

Posted

技术标签:

【中文标题】PFFile 作为 UIImageView【英文标题】:PFFile as UIImageView 【发布时间】:2015-11-24 02:24:49 【问题描述】:

我正在使用 Parse,我有一个名为“GolfScorecard”的类,它有几个键,包括一个“scorecardImage”键,它是一个 PFFile。我正在尝试将所有这些高尔夫记分卡信息显示在 tableViewCell 中。我可以获取要在单元格中显示的其余记分卡类信息(例如日期、高尔夫球场名称、分数等),但在显示 scorecardImage 时遇到问题。

我正在继承 PFObject。当我查询该类时,我会将对象附加到“GolfScorecard”(子类)数组中,然后包含我从 Parse 查询的所有数据。

这个子类有一个 PFFile 类型的属性“scorecardImage”。有没有办法使用“getDataInBackgroundWithBlock”将 PFFile 转换为 UIImage WITHOUT?问题是当我使用“getDataInBackgroundWithBlock”时,图像在错误的单元格中与错误的高尔夫球场名称、分数、日期等不匹配。由于某种原因,当我使用时,所有这些信息都没有保持在一起“getDataInBackgroundWithBlock”方法。

  var scorecardData = [GolfScorecard]()

   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell:UserLeaderboardCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UserLeaderboardCell

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MM-dd-yyyy"

    cell.dateCellLabel?.text = dateFormatter.stringFromDate(scorecardData[indexPath.row].date)

    cell.scoreCellLabel?.text = "\(scorecardData[indexPath.row].score)"

    cell.golfCourseCellLabel?.text = scorecardData[indexPath.row].golfCourse

    return cell
 

 //THIS IS MY QUERY
 func loadUserScorecardData() 
    scorecardData.removeAll()

    let query = GolfScorecard.query()
    query!.whereKey("golfer", equalTo: PFUser.currentUser()!)

    query!.findObjectsInBackgroundWithBlock  (scorecards: [PFObject]?, error: NSError?) -> Void in
        if error == nil 
            for object:PFObject in scorecards! 
                if let object = object as? GolfScorecard 
                    self.scorecardData.append(object)
                    print(self.scorecardData)
                    print(self.scorecardData.count)

                

            

提前致谢!

-这是我设置单元格图像视图的代码

    let pfImage = scorecardData[indexPath.row].scorecardImage

    pfImage.getDataInBackgroundWithBlock(
        (result, error) in

        if result != nil 

            cell.scorecardCellImage.image = UIImage(data: result!)

         else 

            print(error)

        
    )

【问题讨论】:

如果数据存在,您为什么不使用 scorecardImage[indexPath.row].name? 在后台获取数据是正确的,或者使用PF图像视图为你做。显示执行此操作的代码并更正它,而不是试图为您的问题找到一个糟糕的解决方法。 我添加了获取单元格图像视图的代码。 【参考方案1】:

我最终解决了这个问题。我将自定义单元格设为 PFTableViewCell 并将图像转换为 PFImageView。然后我使用了以下代码,它可以将 PFFile 转换为 UIImage,因为 PFImageView 可以接受 PFFile。这使得从 Parse 下载 PFFile 更加顺畅。

    cell.scorecardCellImage.file = scorecardData[indexPath.row].scorecardImage
    cell.scorecardCellImage.loadInBackground()

【讨论】:

以上是关于PFFile 作为 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中解析 PFFile 下载顺序 iOS

从原始数据创建 AVPlayer 或以不同格式将视频保存到 PFFile

从 PFFile 到 PFFile 的条件转换总是成功

PFFile 保存在哪里?

Swift & Parse - 空 PFFile

最终保存 PFFile