2016-07-20 18 views
1

Ich erstelle derzeit eine App in Firebase und ich möchte alle Benutzer Ananas Rate zu bekommen.Alle Benutzer das gleiche Kind in Firebase (Swift)

Dies ist der Baum:

user1: uid1 { 
    fruits: { 
    apple: 3 
    pineapple: 5 
    } 
} 

user2: uid2 { 
    fruits: { 
    apple: 4 
    pineapple: 2 
    } 
} 

ich diesen Code versucht:

var ref = FIRDatabase.database().reference() 
ref.queryOrderedByChild("fruits") 
      .observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
       if (snapshot.value is NSNull) { 
        print("not found") 
       } else { 
        for child in snapshot.children { 
         let rate = child.value["pineapple"] as! String 
         print(rate) 
        } 
       } 
      }) 

Aber es gibt mir einen Fehler Nil von auszupacken.

Bild des structre:

enter image description here

+1

können Sie bitte Ihre Struktur posten –

+0

@ EICaptainv2.0 Hinzugefügt in post – Eliko

+0

ok lassen Sie mich das überprüfen –

Antwort

2

Dies soll wie diese

var ref = FIRDatabase.database().reference() 
    ref.queryOrderedByChild("user2") 
     .observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
      if snapshot.exists() { 
       for child in (snapshot.value?.allValues)! { 
        if let fruits = child["Fruits"] as? [String:String]{ 
         let rate = fruits["pineapple"] 
         print(rate) 
        } 
       } 
      } 
     }) 
+0

Warum ist die 'fruits' und' userid' im selben Stamm? Ich möchte die Früchte in der 'Benutzer' Kofferraum – Eliko

+0

Früchte ist ein Objekt, das in jedem Kind verfügbar ist .. .wie Benutzer-ID ... so sollte Ihre Struktur so sein ... eher machen Früchte im Benutzer ... es ist sehr komplex Struktur und unnötig auch –

+0

und wenn Sie diese Struktur nicht machen möchten ... werde ich eine Antwort für Ihre Struktur auch wenn Sie wollen .. aber es gibt ein Problem ist, dass Ihr user1, user2 ist überhaupt nicht einzigartig ... sollte es in Schlüssel sein: Wert-Paar –

0

Es scheint, dies braucht nur eine tiefe Abfrage sein?

let ref = self.myRootRef.child("parent_node") 

    ref.queryOrderedByChild("Fruits/pineapple").observeSingleEventOfType(.Value, withBlock: { 
     snapshot in 

     if (snapshot.value is NSNull) { 
      print("not found") 
     } else { 
      for child in snapshot.children { 

       let key = child.key as String 
       let dict = child.value["Fruits"] as! NSDictionary 
       let pineapple_count = dict["pineapple"] as! Int 
       print("key = \(key) count = \(pineapple_count)") 

      } 
     } 
    }) 

und der Ausgang ist

key = uid_1 count = 1 
key = uid_0 count = 3 
key = uid_2 count = 21 
+2

Ist das legal ?: 'Früchte/Ananas' – Eliko

+0

@Eliko Es ist! Es ist eine Möglichkeit, eine tiefe Abfrage zu bilden. Probieren Sie meinen Code, es ist getestet. – Jay

0

unter diesen Code ausprobieren (Xcode 8.3.3, Swift 3 und Firebase 3)

var ref = Database.database().reference().child("fruits") 

    ref.observeSingleEvent(of: .value, with: {     
       (snapshot) in 
     if let fruitPost = snapshot.value as? Dictionary<String,AnyObject> { 
       for(key, value) in fruitPost { 
         if let fruitData = value as? Dictionary<String,AnyObject> { 
          if let fruits = fruitData["pineapple"] as? String{ 
            let rate = fruits 
             print(rate) 
            }    
           } 
          } 
        } 

Goodluck Kumpel!

Verwandte Themen