2016-01-06 18 views
1

我試圖找到正確的方法用於以下情形:最佳實踐來處理聽衆的UICollectionView飼料

我有UICollectionView其中顯示對象(具有唯一的ID)。每個用戶都可以「修改」這個對象,顯然,所有其他用戶在同一時刻都需要看到這個變化。

問題是這樣的,我應該聽這個包含所有對象的父對象Value(這聽起來像是浪費「請求時間」,因爲有時用戶會聽他們不需要的改變(萬一的CollectionView過濾),或者我應該設置一組(單)的聽衆,只有當前需要「特定」對象?

謝謝!

回答

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 
+0

哇大衛!非常感謝!幫助我一噸。當然,我會檢查了這一點。我還有幾個問題,是否可以通過快速聊天來關閉我的好奇心? –

+0

我很想回答您的任何問題,但SO評論部分並非最佳媒介。隨意問這個問題,我會盡我所能來回答! –

+0

啊真棒,我會:)剛剛來到我的腦海。可以創建聊天室嗎?我會做一個博客文章的所有結論以及(所以其他開發人員可以享受) –