Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 处理UICollectionView源的侦听器的最佳实践_Ios_Swift_Firebase_Listener - Fatal编程技术网

Ios 处理UICollectionView源的侦听器的最佳实践

Ios 处理UICollectionView源的侦听器的最佳实践,ios,swift,firebase,listener,Ios,Swift,Firebase,Listener,我试图为以下场景找到正确的方法: 我有UICollectionView可以显示对象(具有唯一ID)。每个用户都可以“修改”对象,因此显然所有其他用户在同一时刻都需要看到此更改 问题是,我应该听这个对象的父对象值,它包含所有的对象(听起来像是在浪费“请求时间”,因为有时候用户会听他们不需要的更改(如果collectionView被过滤),还是我应该设置一组(单个)监听器,只听“特定”的当前需要的对象? 谢谢!您可以使用子事件处理对单个子节点的更新 // save updates a diction

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

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

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


谢谢!

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

// 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)
}
//保存使用快照键更新字典
//成为字典的钥匙
var items=[String:FDataSnapshot]()
let ref=Firebase(url:)
//侦听各种子事件并更新数据源
中的ref.observeEventType(.ChildAdded){(snap:FDataSnapshot!)
项[snap.key]=捕捉
}
中的ref.observeEventType(.ChildChanged){(snap:FDataSnapshot!)
项[snap.key]=捕捉
}
中的ref.observeEventType(.ChildRemoved){(snap:FDataSnapshot!)
items.removeValueForKey(snap.key)
}
…是否应该侦听此对象的父值,其中包含 所有对象(听起来像是在浪费“请求时间”

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

,这是一个用于将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
让firebaseRef=Firebase(url:https://.firebaseio.com/")
让数据源:FirebaseCollectionViewDataSource!
...
self.dataSource=FirebaseCollectionViewDataSource(ref:self.firebaseRef,cellReuseIdentifier:,视图:self.collectionView)
self.dataSource.populateCellWithBlock{(单元格:UICollectionViewCell,obj:NSObject)->中的Void
设snap=obj为!FDataSnapshot
//按您认为合适的方式填充单元格,如下所示
cell.backgroundColor=UIColor.blueColor()
}
self.collectionView.dataSource=self.dataSource

Wow David!非常感谢!帮我个忙。我肯定会看看这个。我还有几个问题,是否可以快速聊天来消除我好奇的想法?我很乐意回答你的任何问题,但so评论部分不是最好的媒介。请随意问关于so的其他问题,我会尽力回答!啊,太棒了,我会:)我刚想到。有可能创建聊天室吗?我也会在博客上发布所有的结论(让其他开发者可以享受)。我认为要创建聊天室,你需要有一堆评论