处理 UICollectionView 提要的侦听器的最佳实践
Posted
技术标签:
【中文标题】处理 UICollectionView 提要的侦听器的最佳实践【英文标题】:Best Practise to handle listeners for a UICollectionView feed 【发布时间】:2016-01-06 09:32:56 【问题描述】:我正在尝试为以下场景找到正确的方法:
我有 UICollectionView
显示对象(具有唯一 ID)。每个用户都可以“修改”对象,因此显然所有其他用户在同一时刻都需要看到这种变化。
问题是这样的,我应该听这个对象的父 Value
,其中包含所有对象(这听起来像是浪费“请求时间”,因为有时用户会听他们不做的更改'不需要(如果collectionView被过滤),或者我应该设置一堆(单个)监听器,只针对当前需要的“特定”对象?
谢谢!
【问题讨论】:
【参考方案1】:您可以使用子事件来处理对单个子节点的更新。
// 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
【讨论】:
哇,大卫!非常感谢!帮我一吨。我肯定会检查一下。我还有几个问题,是否可以通过快速聊天来关闭我的好奇心? 我很乐意回答您的任何问题,但 SO cmets 部分并不是最好的媒介。随意问另一个关于 SO 的问题,我会尽力回答! 啊,太棒了,我会的:)我突然想到了。可以创建聊天室吗?我也会写一篇关于所有结论的博文(以便其他开发人员可以享受) 我想找个聊天室 你需要有一堆cmets以上是关于处理 UICollectionView 提要的侦听器的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView 在移动应用上创建新闻提要的代码
如何减少情节提要中 UICollectionView 单元格之间的填充空间?
具有自定义布局的 UICollectionView - 无法在情节提要中添加补充视图