Firebase子实时添加而不是在集合视图中更新

时间:2016-10-05 23:08:27

标签: ios swift firebase firebase-realtime-database

在阅读了关于重新加载Firebase observeEventType观察者的一系列其他问题后,我感到非常困惑。我将我的观察者词典添加到整个控制器中可访问的变量中。然后我将该值分配给数据源字典,并加载以前添加的所有子项。

但是,一旦我尝试从另一个模拟器添加新值或在后端手动输入,我的全局字典将使用新值更新,但我的数据源变量不会。一旦我离开控制器,它最终会更新,但它无法使用Firebase。

我认为一个开放的观察者应该在viewWillAppear中,但是很多在线资源似乎都在viewDidLoad中。

我使用分段控件来浏览每个自定义类,这可能会导致问题。该设置是一个集合视图控制器,其单元格也是自定义集合视图,也是单元格。

        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
            self.loadFireData()
        }

    func loadFireData() {
    if let locationId = location.locationId {

        let postQuery = ref.child("Posts").child(selectedRegion).child(locationId).queryOrderedByChild("descTime")
        postQuery.observeEventType(.ChildAdded, withBlock: { (snap) in


            if snap.exists() {
                let postQuery = snap.value! as! [String: AnyObject]

                let feedPost = FeedModel()

                feedPost.value = postQuery["value"] as? String

                feedPost.key = postQuery["key"] as? Int
                feedPost.balance = postQuery["balance"] as? Double
                self.post.append(feedPost)

                dispatch_async(dispatch_get_main_queue(), {
                    self.collectionView!.reloadData()
                })
            } 

            }

        })
    }

}

     override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    if indexPath.section == 1 {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(feedCellId, forIndexPath: indexPath) as! LocationFeedCell
        cell.location = location
         //this doesn't seem to be updating here 
        cell.posts = posts

        return cell
    }

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

你只是将postpost添加到post数组中。因此,在重新加载collectionview之后,您应该根据indexpath.row将最新的footpost添加到自定义单元格的标签中

if indexPath.section == 1 {
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(feedCellId, forIndexPath: indexPath) as! LocationFeedCell
            cell.location = location
             //Replace this below line: 
            cell.posts = post[indexpath.row] as! String

            return cell
        }