2017-03-09 35 views
1

我试图在按下按钮时将Firebase DB中条目的值从false更新为true。我可以用下面的代码获得当前快照值:Swift:无法更新Firebase DB值

@IBAction func test(_ sender: Any) { 

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

    print(snapshot) 

    }) 
} 

我尝试使用下面的代码更新“Request_Made”从虚假到真实的价值,但我得到一个SIGBRT。

@IBAction func test(_ sender: Any) { 


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

    } 

这里是我的数据库条目的外观在火力点:

enter image description here

回答

1

这将是正确的做法。

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

不需要从根重建参考。你可以使用'sell_request.ref.child(“Request_Made”)。setValue(false)' – dstepan

+0

你是对的。谢谢。 –

+0

你们真棒!感谢你们俩!! – user2411290

1

我相信你仍然需要观察查询。

@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

我希望我能给你两个最好的答案,因为这两个工作。谢谢! – user2411290

+0

没问题。很高兴它对你有效。在未来,如果两种方法同样有效,那么首先发布的问题通常是被选作答案的问题。快乐的编码! – dstepan