我一直在探索如何创建一个允许用户分享照片的社交应用程序。我使用Parse作为后端,该应用程序的一个功能是允许用户将图片保存到Parse,并查看当前保存到Parse的所有照片。
我的应用程序当前将照片推送到Parse服务器就好了。然而,当我试图在我的" Wall"上显示上传的照片时,我会遇到奇怪的行为。
以下是我如何将照片保存到Parse:
let pictureData = UIImagePNGRepresentation(UIImage(named: "someImage"))
let file = PFFile(name: "image", data: pictureData)
file.saveInBackgroundWithBlock({ succeeded, error in
if succeeded {
let wallObject = WallObject(imageFile: file)
wallObject.saveInBackgroundWithBlock { succeeded, error in
if succeeded { println("Succeeded saving picture to Parse") }
if let error = error { println("Error saving object: \(error)") }
}
} else {
println("Error saving file to Parse: \(error)")
}
})
保存工作正常,当我检查网站上的Parse数据库时,图像就在那里。但是,当我尝试在我的PFQueryCollectionViewController
子类中显示图像时(通过使用pullDownToRefresh),新图像不会将自身作为新单元格插入,而是替换其中一个旧图像,从中踢出最旧的图像即使在从Parse获取新对象之后,collectionView仍保留相同数量的单元格。
除了继承UICollectionViewLayout
并做一些布局代码之外,PFQueryCollectionViewController
的设置非常简单。使用println(objects.count)
和objectsWillLoad
方法中的objectsDidLoad
语句,我向自己保证新对象已加载到objects
数据数组中。
尝试解决方案:
我尝试collectionView!.reloadData
设置了一个调用reloadObjects
的按钮,使用了collectionView' performBatchUpdates
,并遇到了这个错误:UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:
底线:虽然PFQueryCollectionViewController
在运行时刷新时识别出新对象,但它不会插入新单元格以容纳新项目。
有一点需要注意的是,当Parse数据库完全为空并且新图片上传到Parse时,collectionView可以为新图像正确生成1个新Cell。
PFQueryCollectionViewController dataSource实现
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFCollectionViewCell? {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as? FeedViewCollectionCell
if cell == nil {
cell = FeedViewCollectionCell()
}
cell!.populateDataWithObject(object as! CollectionCellData)
return cell
}
答案 0 :(得分:1)
除了继承UICollectionViewLayout并做一些布局之外 代码
这是可疑的,你没有自定义布局吗?
答案 1 :(得分:0)
把这个:
cell?.imageView.image = nil its work for me