2016-10-05 18 views
1

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

Antwort

0

werden Sie hinzufügen, nur feetpost in Post-Array. So nach dem Neuladen Kollektion, sollten Sie neuesten feetpost in Ihrer benutzerdefinierten Zelle hinzufügen Etikett

if indexPath.section == 1 { 
      let cell = collectionView.dequeueReusableCellWithReuseIdentifier(feedCellId, forIndexPath: indexPath) as! LocationFeedCell 
      cell.location = location 
      //Replace this below line: 
      cell.posts = post[indexpath.row] as! String 

      return cell 
     } 
+0

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

Verwandte Themen