处理UICollectionView提要的侦听器的最佳实践

时间:2016-01-06 09:32:56

标签: ios swift firebase listener

我正在尝试为以下场景找到正确的方法:

我有UICollectionView显示对象(具有UNIQUE ID)。每个用户都可以“修改”对象,因此显然所有其他用户在同一时刻都需要看到这种变化。

问题是这个,我应该听这个对象的父Value,它包含所有对象(这听起来像是浪费了“请求时间”,因为有时用户会听取更改他们不需要(如果过滤了collectionView),或者我应该设置一堆(单个)侦听器,只针对当前需要的“特定”对象?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用子事件处理对单个子节点的更新。

// save updates a dictionary with the snapshot key 
// being the dictionary key
var items = [String: FDataSnapshot]()
let ref = Firebase(url: "<my-firebase-app>")
// listen to various child events and update the data source
ref.observeEventType(.ChildAdded) { (snap: FDataSnapshot!) in
  items[snap.key] = snap
}
ref.observeEventType(.ChildChanged) { (snap: FDataSnapshot!) in
  items[snap.key] = snap
}
ref.observeEventType(.ChildRemoved) { (snap: FDataSnapshot!) in
  items.removeValueForKey(snap.key)
}
  

...我应该听这个包含的对象的父值   所有的对象(听起来像浪费“请求时间”

不考虑请求非常重要。 Firebase使用WebSockets。一旦建立了WebSocket,它就会与服务器保持持久连接。在套接字之间来回发送数据需要很少的开销。

But, I would actually use FirebaseUI ,这是一个用于将Firebase数据同步到UITableView和UICollectionView的库。

let firebaseRef = Firebase(url: "https://<YOUR-FIREBASE-APP>.firebaseio.com/")
let dataSource: FirebaseCollectionViewDataSource!
...
self.dataSource = FirebaseCollectionViewDataSource(ref: self.firebaseRef, cellReuseIdentifier: "<YOUR-REUSE-IDENTIFIER>", view: self.collectionView)

self.dataSource.populateCellWithBlock { (cell: UICollectionViewCell, obj: NSObject) -> Void in
  let snap = obj as! FDataSnapshot

  // Populate cell as you see fit, like as below
  cell.backgroundColor = UIColor.blueColor()
}

self.collectionView.dataSource = self.dataSource