2016-03-22 22 views
0

için ortak rutinler içeren bir Firebase References dizisi oluşturun Her birinde aynı rutini ateşleyen dinleyicilere sahip bir Firebase Örneği dizisi oluşturmak istiyorum. ÖrneğinDinleyiciler

: Veri varsayalım gibi kök depolanır: her oda içinde

https://someapp.firebaseio.com/chatrooms/RoomFoo/John/... 
https://someapp.firebaseio.com/chatrooms/RoomFoo/Mary/... 
.. 
.. 
https://someapp.firebaseio.com/chatrooms/RoomBar/Alice/... 
https://someapp.firebaseio.com/chatrooms/RoomBar/Bob/... 

üyeleri de

Adam katılır Diyelim ki bu odada, her bir kullanıcı için bir dinleyici (childAdded ve childRemoved) sahip RoomFoo başladığında:

  • Adam kullanıcı John ve u
  • Adam dinleyici setleri güncel verileri alır ser Mary: durumunda bu kullanıcıların ekleyebilir veya altında verileri kaldırmak themsleves
  • Adam RoomFoo de Dinleyici setleri, o Benzer

katılır herhangi yeni bir kullanıcı işleyebilir:

  • John ve Mary yeni bir kullanıcı ekledi (Adam) adlı kullanıcıya yeni bir kullanıcı ekledi
  • John and Mary, Adam'ın dinleyicilere veri ekledi Adam ekliyor veya onun altında kaldırıyor

Bir dizi Firebase referansı oluşturursam, bu diziye referanslar ekleyebilir/kaldırabilir ve dinleyicileri de ekleyebilirim, ancak bu dinleyiciler hiçbir zaman aranmaz!

Bu dizi ilan edilir nasıl (Swift)

var allUserRef : [Firebase] = [] 

dinleyici

func userJoinedRoom(snapshot: FDataSnapshot!) { 
     print(snapshot.key + " Joined!") 
     let firebaseRootRef = Firebase(url: firebaseRootUrl) 
     let roomsRootRef = firebaseRootRef.childByAppendingPath(roomsRelativePath) 
     let userRoomRef = roomsRootRef.childByAppendingPath(snapshot.key) 
     //read initial data as well : TODO 
     allUserRef.append(userRoomRef) 
     print(allUserRef) //Works great - i can see a list of references 
     userRoomRef.observeEventType(.ChildAdded, withBlock: userAddedData) 
     userRoomRef.observeEventType(.ChildRemoved, withBlock: userRemovedData) 
    } 

sorun userAddedData ve userRemovedData çağrılan asla olmasıdır bu dizinin bir başvuru ekler ve ayarlar mantık

Hatam nedir?

+0

onlarca ayrı gözlemci mi?/Sohbetler gözlemlenirse, kullanıcı veya kullanıcı verileri eklendiğinde (veya değiştirildiğinde), uygulama bildirilir ve yeni eklenen kullanıcı mevcut kullanıcıyla aynı odada bulunuyorsa, ne gerekiyorsa yapın (güncelleme UI'si) Örneğin, isimleriyle), olayı görmezden gelin. Bir seviye aşağıya çekilebiliyor ve kullanıcının tüm kullanıcılar (bir seviye yukarı) veya bireysel kullanıcılar (bir seviye aşağı) – Jay

+0

Oh yerine nerede olduğunu gözlemliyor ve neden bir dizi referans tutuyorsunuz? Bir gözlemciyi ekledikten sonra, onu kaldırana kadar o düğüme 'yapışır'. Gözlemcileri kaldırmak için hala bu 'kaynaklara' ihtiyacınız varsa Firebase tutamaçlarına bakmak ve bunları bir dizide tutmak isteyebilirsiniz: var handle = ref.observeEventType (.Value, withBlock: {snapshot in ... – Jay

+0

Merhaba Jay, iyi Kullanıcı başına bir gözlemciye sahip olmamın nedeni, bir kullanıcının kendi kökünde büyük miktarda içerik oluşturması/değiştirmesi olabilir.Anladığım kadarıyla, oda ismindeki bir firebase dinleyicisi bana sadece yeni/değiştirilmiş veriler sağlamaz, bunun yerine altındaki ağacın içindeki tüm içerikler, bu nedenle istemci tarafında ne olduğunu anlamam gerekir. yeni/değişti. Bu nedenle ayrı gözlemciler yaratmak için motivasyon. Tavsiye etmediğin bir şey mi? Yukarıdaki ikilemi nasıl ele aldığımı önerebilir misin? – wrecktangle

cevap

0

Jay Açıklamalarda belirttiği şekilde yerine Firebase örnekleri (kullanıcı kimliği tarafından dizine) sözlükte kolları tutarak benim sorunum sabit sadece/sohbet odalarında bir gözlemci ayar yerine olmamasından sebebi nedir

İlgili konular