在阅读了关于重新加载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
}
非常感谢任何帮助
答案 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
}