1

Ich möchte eine TabelleView basierend auf dem Timestamp Kind Wert in Firebase sortieren. Ich möchte, dass die neueste tableViewCell, die der tableView hinzugefügt wurde, bei jedem Laden der tableView (oder neu geladenen) über die Tabellenansicht gesetzt wird. Danke für jede Hilfe im Voraus!laden TabelleView basierend auf dem neuesten Zeitstempel

// JSON von Feuerbasis

{ 
    "users" : { 
    "CmtuebwVrmOG3n4uSsIK1b4FsSN2" : { 
     "Places" : { 
     "-KhDwZJvca9HedFluJ5O" : { 
      "addedBy" : "CmtuebwVrmOG3n4uSsIK1b4FsSN2", 
      "place" : "Edinburgh, UK", 
      "timestamp" : 1.491678152020824E9 
     }, 
     "-KhE7raDrM2RRs-N6FXg" : { 
      "addedBy" : "CmtuebwVrmOG3n4uSsIK1b4FsSN2", 
      "place" : "Hong Kong", 
      "timestamp" : 1.49168137667081E9 
     }, 
     "-KhFUaEjjhE3RBOw95fc" : { 
      "addedBy" : "CmtuebwVrmOG3n4uSsIK1b4FsSN2", 
      "place" : "Illinois, USA", 
      "timestamp" : 1.491704112134812E9 
     }, 
     "-KhzSIHrFHiUEBrzBKUH" : { 
      "addedBy" : "CmtuebwVrmOG3n4uSsIK1b4FsSN2", 
      "place" : "Ghana", 
      "timestamp" : 1.492492039376661E9 
     } 
     }, 

// Funktion Tableview der Orte laden

var placeList = [Place]() 
    var placesDictionary = [String: Place]() 

    func fetchPlaces() { 

     let uid = FIRAuth.auth()?.currentUser?.uid 

     let ref = FIRDatabase.database().reference().child("users").child(uid!).child("Places") 
     ref.observe(.childAdded, with: { (snapshot) in 

      if let dictionary = snapshot.value as? [String: AnyObject] { 

       let place = Place() 
       place.setValuesForKeys(dictionary) 
//    self.placeList.append(place) 

       if let addedBy = place.addedBy { 
        self.placesDictionary[addedBy] = place 
        self.placeList.append(place) 

        self.tableView.beginUpdates() 
        self.tableView.insertRows(at: [IndexPath(row: self.placeList.count-1, section: 0)], with: .automatic) 
        self.tableView.endUpdates() 

       } 

       //this will crash because of background thread, so lets call this on dispatch_async main thread 
       DispatchQueue.main.async(execute: { 
        self.tableView.reloadData() 
       }) 
      } 

     }, withCancel: nil) 

    } 

Antwort

1

Wenn Sie nur die letzte Datensatz wollen in den ersten Index Ihrer Arrays eingefügt werden sollen. Warum Sie nicht so etwas tun:

self.placeList.insert(place, at: 0) 

statt

self.placeList.append(place) 

Btw, ich glaube nicht, folgendes notwendig wäre:

self.tableView.beginUpdates() 
self.tableView.insertRows(at: [IndexPath(row: self.placeList.count-1, section: 0)], with: .automatic) 
self.tableView.endUpdates() 
+0

Dank! Ja - der Anfangs- und Ende-Update-Code erschien mir auch überflüssig. – user3708224

+0

Keine Sorge, bitte markieren Sie Ihre Frage als beantwortet, wenn es Ihr Problem löst – Lawliet

Verwandte Themen