Nach dem Lesen einer Reihe von anderen Fragen über SO über das erneute Laden Firebase beobachtenEventType Beobachter, bin ich ziemlich verwirrt. Ich füge meine Observer-Wörterbücher zu einer Variablen hinzu, auf die innerhalb des gesamten Controllers zugegriffen werden kann. Ich weise diesen Wert dann dem Datenquellenwörterbuch zu und lädt alle zuvor hinzugefügten untergeordneten Elemente.Firebase Kind hinzugefügt in Echtzeit nicht in der Sammlung aktualisieren
Sobald ich jedoch versuche, neue Werte aus einem anderen Simulator hinzuzufügen oder manuell im Backend einzugeben, wird mein globales Wörterbuch mit dem neuen Wert aktualisiert, aber meine Datenquellenvariable nicht. Sobald ich den Controller verlasse, wird es eventuell aktualisiert, aber es vereitelt den Zweck der Verwendung von Firebase.
Ich denke, ein offener Beobachter sollte in ViewWillAppear sein, aber eine Menge Quellen online schien es in ViewDidLoad zu haben.
Ich verwende ein segmentiertes Steuerelement, um jede benutzerdefinierte Klasse zu durchlaufen, die das Problem verursachen kann. Das Setup ist ein Auflistungsansicht-Controller, dessen Zellen benutzerdefinierte Auflistungsansichten sind, die ebenfalls Zellen sind.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.loadFireData()
}
func loadFireData() {
if let locationId = location.locationId {
let postQuery = ref.child("Posts").child(selectedRegion).child(locationId).queryOrderedByChild("descTime")
postQuery.observeEventType(.ChildAdded, withBlock: { (snap) in
if snap.exists() {
let postQuery = snap.value! as! [String: AnyObject]
let feedPost = FeedModel()
feedPost.value = postQuery["value"] as? String
feedPost.key = postQuery["key"] as? Int
feedPost.balance = postQuery["balance"] as? Double
self.post.append(feedPost)
dispatch_async(dispatch_get_main_queue(), {
self.collectionView!.reloadData()
})
}
}
})
}
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if indexPath.section == 1 {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(feedCellId, forIndexPath: indexPath) as! LocationFeedCell
cell.location = location
//this doesn't seem to be updating here
cell.posts = posts
return cell
}
Jede Hilfe wird sehr geschätzt
Sorry indexpath.row nach, ich war früher nicht klar genug, aber das war nur ein Beispiel für einen des Schlüssels sein sollte Wertpaare des Post-Wörterbuchs. Dies funktioniert jedoch immer noch nicht, da dem Wörterbuch nur ein Wert zugewiesen wird, der auf dem Spielen mit diesem Code basiert – SethG