解析未加载到PFTableViewCell的文件图像

时间:2015-04-23 01:26:02

标签: ios swift parse-platform

@IBOutlet weak var itemImage: PFImageView!

override func tableView(tableView: (UITableView), cellForRowAtIndexPath indexPath: (NSIndexPath!), object: PFObject!) -> PFTableViewCell? {

    var cell = tableView.dequeueReusableCellWithIdentifier("PFTableViewCell") as! ItemViewCell!

    let items = object as! Items

    let thumbnail = items.valueForKey("itemImage") as! PFFile!
    cell.itemImage?.file = thumbnail

    return cell
}

当我运行它时,PFTableViewController只是无限加载。

评论:

cell.itemImage?.file = thumbnail

将加载TVC但没有加载图像。我在故事板中为每个连接/插座提供了必要的功能。

2 个答案:

答案 0 :(得分:1)

如果您尝试在tableView中的单元格内显示UIImageView中的图像,则给出的答案将引发错误,因为您只为其分配了一个UIImage实例。

要解决此问题,您需要将UIImageView插座分配给.image 如下图所示;

cell.itemImage.image = image

在我的测试项目中有效的完整解决方案如下;

if let pic = items.objectForKey("itemImage") as? PFFile
{
   pic.getDataInBackgroundWithBlock(
   { (data: NSData?, error: NSError?) -> Void in

       if((error) == nil && data != nil)
       {
           if let image = UIImage(data: data!) 
           { 
               cell.itemImage.image = image 
           }
       }                 
           else { NSLog("Error loading profile image in cell") }
       }
})

编辑:正如前一篇文章的评论中所提到的,您还需要在数据显示之前重新加载tableView,因为tableView几乎总是在此示例中的图像之前加载。

您可以通过添加;

来完成此操作
tableView.reloadData()

在你的功能结束时

答案 1 :(得分:0)

我认为你需要调用getDataInBackground来获取实际的PFFile数据,然后你可以从你从查询中获取的NSData对象创建一个UIImage。

if let pic = items.objectForKey("itemImage") as? PFFile
{
   pic.getDataInBackgroundWithBlock(
   { (data: NSData?, error: NSError?) -> Void in

       if((error) == nil && data != nil)
       {
           if let image = UIImage(data: data!) 
           { 
               cell.itemImage = image }
           }                 
           else { NSLog("Error loading profile image in cell") }
       }
})

这假设你的UITableViewCell子类有一个属性“itemImage”。