使用firebase数据填充集合视图



我正在尝试重新创建一个新的firebase项目,在该项目中,您可以使用firebase实时数据库中的数据填充表视图,该数据库包含指向firebase存储中图像的链接。

我可以填充教程项目,它是一个带有firebase数据的表视图。但在我目前的项目中,它是一个扩展中的集合视图。

我已经将问题缩小到我的变量

var ref: FIRDatabaseReference!
var messages: [FIRDataSnapshot]! = []
var msglength: NSNumber = 10
private var _refHandle: FIRDatabaseHandle!

特别是

var messages: [FIRDataSnapshot]! = []

我想这是我从火球得到的一系列数据

然后,我调用一个函数,该函数应该在我的viewdidload()中填充该数组

func loadPosts(){
self.messages.removeAll()
// Listen for new messages in the Firebase database
_refHandle = self.ref.child("messages").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
//print("1")
self.messages.append(snapshot)
//print(self.messages.count)
})
}

当我试图填充集合视图时会出现问题,因为我想要水平滚动,所以我使用了扩展。在扩展中,我发现我的值数组总是0,但在我的loadPosts()函数中,我的>数组的计数与我在firebase中的帖子数量相同。

extension HomeViewController : UICollectionViewDataSource
{
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return messages.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
print(messages.count)
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(StoryBoard.CellIdentifier, forIndexPath: indexPath) as! InterestCollectionViewCell
// Unpack message from Firebase DataSnapshot
let messageSnapshot: FIRDataSnapshot! = self.messages[indexPath.row]
let message = messageSnapshot.value as! Dictionary<String, String>
let name = message[Constants.MessageFields.name] as String!
if let imageUrl = message[Constants.MessageFields.imageUrl] {
if imageUrl.hasPrefix("gs://") {
FIRStorage.storage().referenceForURL(imageUrl).dataWithMaxSize(INT64_MAX){ (data, error) in
if let error = error {
print("Error downloading: (error)")
return
}
cell.featuredImageView?.image = UIImage.init(data: data!)
}
} else if let url = NSURL(string:imageUrl), data = NSData(contentsOfURL: url) {
cell.featuredImageView?.image = UIImage.init(data: data)
}
cell.interestTitleLabel?.text = "sent by: (name)"
}
return cell
}
}

我应该不使用FIRDataSnapshot吗?如果是,使用哪个是正确的?或者我应该以另一种不使用扩展的形式来处理项目?

您正确地将项目插入到完成块内的数组中,但缺少重新加载collectionView的调用。

相关内容

  • 没有找到相关文章

最新更新