使用Firebase数据填充集合视图
我正在尝试重新创build一个新的Firebase项目,在其中填充表格视图,其中包含来自Firebase实时数据库的数据,其中包含指向Firebase存储中图片的链接。
我可以使用Firebase数据填充教程项目,这是一个表格视图。 但与我目前的项目,它是一个扩展内的集合视图。
我已经把问题缩小到了我的variables
var ref: FIRDatabaseReference! var messages: [FIRDataSnapshot]! = [] var msglength: NSNumber = 10 private var _refHandle: FIRDatabaseHandle!
特别
var messages: [FIRDataSnapshot]! = []
我认为这是我从Firebase获得的数据的一个数组
然后我调用一个函数,应该在我的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()函数中,my>数组的计数与我在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? 如果是的话哪一个是正确的? 还是应该以不使用扩展的另一种forms来处理项目?
您正确地将项目插入到完成块内的数组中,但是缺less调用来重新加载collectionView。