图片未出现在PFQueryCollectionViewController

时间:2015-05-14 14:59:47

标签: ios swift parse-platform uicollectionview pfimageview

我正在处理应该在UICollectionView中显示图片的iPhone应用。图像保存在Parse云上,我使用PFQueryCollectionViewController的子类进行查询并显示图像。

点击MKMapView标注会触发显示CollectionViewController的segue。第一次出现CollectionViewController时,图像不会出现在单元格中。但是,如果我返回MapView,然后返回CollectionViewController,则图片会显示在单元格中。

如何在第一次出现PFQueryCollectionViewController时让图像显示?

这是我的代码:

class PhotoGridCollectionViewController: PFQueryCollectionViewController {

override func viewDidAppear(animated: Bool) {
}

override func viewDidLoad() {
  super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
  super.didReceiveMemoryWarning()
  // Dispose of any resources that can be recreated.
}

// MARK: UICollectionViewDataSource

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
  //#warning Incomplete method implementation -- Return the number of sections
  return 1
}

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  //#warning Incomplete method implementation -- Return the number of items in the section
  return self.objects.count
}

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFCollectionViewCell? {

  let cell = collectionView.dequeueReusableCellWithReuseIdentifier("venuePhotoThumb", forIndexPath: indexPath) as! PhotoGridCollectionViewCell

  if let pfObject = object {
    cell.imageView.file = pfObject["imageFile"] as? PFFile
    cell.imageView.loadInBackground({ (img, err) -> Void in
      println("Download complete")
    })
  }

  return cell
}

}

由于我使用的是故事板,我通过在属性检查器中设置parseClass来传递我的自定义类:

enter image description here

正如您所看到的,我使用loadInBackground的{​​{1}}方法异步加载图像,我认为问题可能是由于图像被下载后导致的细胞被退回,但我没有任何其他想法。有谁知道为什么第一次出现视图时图像没有出现?

1 个答案:

答案 0 :(得分:2)

我的合作开发者终于找到了答案。在PFImageViews中配置单元格时,我们必须为cellForItemAtIndexPath设置占位符图像。 Parse上的代码示例包括设置占位符图像,但他们并不是说PFQueryCollectionViewController需要正常工作。我们认为这是一种美感,我们可以在以后回来。

所以答案是:为了在PFQueryCollectionViewController的单元格中正确加载图像,在cellForItemAtIndexPath中配置单元格时,必须提供占位符图像。

以下是有效的代码:

let placeholder = UIImage(named: "myPlaceholderImage")  //an image from images.xcassets in your xcode project
cell.imageView.image = placeholder

if let pfObject = object {
    cell.imageView.file = pfObject["image"] as? PFFile
    cell.imageView.loadInBackground()
}