2017-03-09 2 views
1

Ich versuche, den Wert eines Eintrags in meiner Firebase-DB von false auf true zu aktualisieren, wenn ich eine Taste drücke. Ich kann den Wert des aktuellen Schnappschuss mit dem folgenden Code erhalten:Swift: Ich kann einen Firebase-DB-Wert nicht aktualisieren

@IBAction func test(_ sender: Any) { 

ref.child("Sell_Request").queryOrdered(byChild: "name").queryEqual(toValue: requestUsername).observeSingleEvent(of: .value, with: { (snapshot : FIRDataSnapshot) in 

    print(snapshot) 

    }) 
} 

Ich versuche, den folgenden Code zu verwenden, um den Wert von „Request_Made“ von false auf true zu aktualisieren, aber bin immer einen SIGBRT.

@IBAction func test(_ sender: Any) { 


     ref.child("Sell_Request").queryOrdered(byChild: "name").queryEqual(toValue: requestUsername).setValue(true, forKey: "Request_Made"); 

    } 

Hier ist, wie mein DB-Eintrag in Firebase aussieht:

enter image description here

Antwort

1

Dies wäre der richtige Weg, dies zu tun.

ref.child("Sell_Request").queryOrdered(byChild: "name").queryEqual(toValue: requestUsername).observeSingleEvent(.value, with: { dataSnapshot in 
    let enumerator = dataSnapshot.children 
    while let sell_request = enumerator.nextObject() as? FIRDataSnapshot { 
     sell_request.ref.child("Request_Made").setValue(true) 
    } 
}) 
+1

Keine Notwendigkeit, die Referenz von der Wurzel neu aufzubauen. Sie könnten einfach 'sell_request.ref.child (" Request_Made ") verwenden. SetValue (false)' – dstepan

+0

Sie haben Recht. Vielen Dank. –

+0

Ihr seid großartig! Danke euch beiden!! – user2411290

1

Ich glaube, Sie noch die Abfrage beobachten müssen.

@IBAction func test(_ sender: Any) { 

    ref.child("Sell_Request").queryOrdered(byChild: "name").queryEqual(toValue: requestUsername).observeSingleEvent(of: .value, with: { snapshot in 

     for child in snapshot.children {   

      if let item = child as? FIRDataSnapshot { 

       item.ref.setValue(true, forKey: "Request_Made"); 
      } 
     } 
    } 
} 
+0

Ich wünschte, ich könnte Ihnen beide beste Antworten geben, da beide arbeiten. Vielen Dank! – user2411290

+0

Kein Problem. Froh, dass es für dich funktioniert hat. Wenn beide Methoden in Zukunft gleich gut funktionieren, ist die Frage, die zuerst gepostet wurde, normalerweise diejenige, die als Antwort ausgewählt wird. Glückliche Kodierung! – dstepan

Verwandte Themen