【问题标题】:Best Practise to handle listeners for a UICollectionView feed处理 UICollectionView 提要的侦听器的最佳实践
【发布时间】:2016-01-06 09:32:56
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: ios swift firebase listener


    【解决方案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
    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    相关资源
    最近更新 更多