2016-11-18 4 views
1

Ich baue eine 2-Bestellung-App, eine für den Kunden Bestellungen zu buchen, die andere für die Fahrer zu akzeptieren, so von der anderen App habe ich keinen Zugriff auf Benutzer-ID, es funktioniert kaum, aber ein Kopfschmerz zu Firebase Jetzt versuche ich, neue Befehle zu meiner Datenstruktur hinzuzufügen/zu lesen, aber ich konnte nicht herausfinden, wie ich nur die neuen Befehle lese, ohne eine ganze Reihe von Schleifen zu erstellen, wenn ich Daten verändere. ich alles löschen und wieder alle Daten laden,Kann ich meine Firebase-Struktur verbessern?

enter image description here

hier ist mein Code

override func viewDidLoad() { 
    super.viewDidLoad() 





    loadData() 


    ref.observe(.childChanged, with: { snapshot in 
     print("\n\n\nthe changed user is: \(snapshot.value)\n\n\n") 
     self.usrData.removeAll() //if change is detected, remove  everything then readd them 

     self.loadData() //load firebase Data to my data structure 
    }) 

} 

Hier ist meine Last Daten Methode

func loadData(){ 

    ref.observe(.childAdded, with: { snapshot in 
     if let result = snapshot.children.allObjects as? [FIRDataSnapshot] { 
      print("snapshot.value is snapshot \(snapshot.valueInExportFormat())") 

      if let tes = snapshot.value as? Dictionary<String, AnyObject> { 
       print("snapshot dictionarty is snapshot \(tes.reversed())") 



       let est = tes.reversed() 

       for t in est { 
        print("snapshot dictionarty name snapshot \(t.value["name"] as! String)") 
        print("snapshot dictionarty name snapshot \(t.value["email"] as! String)") 
        print("snapshot dictionarty name key \(t.key)") 



        let usr = userData(name: t.value["name"] as! String, email: t.value["email"] as! String, mobile: "", date: 0, latitude: "", longititude: "", ordertxt: "", status: "", usrKey:t.key, orderNumb:"") 

        self.usrData.append(usr) 

       } 

      } 

      var count = 0 


      for child in result { 

       let dict = child.childSnapshot(forPath: "orders").value as! Dictionary<String, AnyObject> 
       print("dict is \(dict)") 


       for dic in dict { 

        if (dic.value["status"] as! String) == "pending" { 

         self.usrData[count].mobile = dic.value["mobile"] as! String 
         self.usrData[count].date = dic.value["date"] as! NSNumber 
         self.usrData[count].latitude = dic.value["latitude"] as! String 
         self.usrData[count].longititude = dic.value["longitude"] as! String 
         self.usrData[count].ordertxt = dic.value["orderText"] as! String 
         self.usrData[count].status = dic.value["status"] as! String 
         self.usrData[count].orderNumb = dic.key 

         print("\(count) dic key is\(dic.key)") 

        } else { 
         print("\n\n\n status isn't pending for some reason -> \(self.usrData[count].status)") 
         self.usrData.remove(at: count) 
         count-=1 
         continue 
        } 

       } 
       count += 1 
      } 
     } else { 
      print("\n\n result is nil or something\n\n"); 
     } 


     self.tableView.reloadData() 

    }) 



} 

sowieso, um es zu verbessern?

Antwort

1

Sie können dies versuchen: -

users:{ 

    userID1 :{...// DATA 

    ORDERS :{ 
     orderID1 : true, 
     orderID2 : true, 
     orderID3 : true 
     } 
     }, 
    userID1 :{...// DATA 

    ORDERS :{ 
     orderID1 : true, 
     orderID2 : true, 
     orderID3 : true 
     } 
     }, 
    userID1 :{...// DATA 

    ORDERS :{ 
     orderID1 : true, 
     orderID2 : true, 
     orderID3 : true 
     } 
     } 

    orderes_Placed :{ 

    orderID1 : {//order details}, 
    orderID2 : {//order details}, 

    } 
} 

Sie sollten es vermeiden, in der NoSQL-Datenstruktur nisten und versuchen, es zu glätten, so viel wie möglich, wie es Ihre Bandbreitenverbrauch erhöht, wenn Sie navigieren. durch deine tiefen Knoten.

zum newData hinzugefügt, um Ihre Datenbankknoten zu hören, nur einen Hörer (.observe starten (.childAdded ..) genau in diesem Knoten.

FIRDatabase.database().reference().child("orders_Placed").observe(.childAdded, with: {(Snapshot) in 


     print(Snapshot) // Will print out every new order that is placed via your app. 

    }) 
Verwandte Themen