2016-11-30 155 views
0

我一直無法保存從Firebase引入的對象。我想獲取'cardAmount'的值,添加並保存。但它不斷給我帶來麻煩,因爲它不會將數字轉換爲字符串。我想我可能會在修改數據結構時出錯,但我一直在堅持這一點 - 任何人都可以給我一些關於如何根據需要編輯Firebase中的單個子快照的指導?使用Swift 3更新Firebase中的現有對象

let sevenDayOption = UIAlertAction(title: "Seven Day: $31", style: .default, handler: { 
     (alert: UIAlertAction!) -> Void in 
     let query = ref.queryOrdered(byChild: (FIRAuth.auth()!.currentUser?.uid)!) 
     query.observeSingleEvent(of: .value, with: { (snapshot) in 
      let cardAmount = snapshot.childSnapshot(forPath: "cardAmount").value as! Float 
      let newAmount = cardAmount + 31 
      let newAmountString = String(format:"%.2f", newAmount) 
      snapshot.setValue(newAmountString, forKeyPath: snapshot.childSnapshot(forPath: "cardAmount").value as! String) 
      print(snapshot.childSnapshot(forPath: "cardAmount").value as! Float) /*<---- Prints Optional(30.5)*/ 

     }) 
    }) 

我敢肯定它可能是簡單的東西,但它也是目前沒有的東西。 Firebase和Swift相對較新,因此它有時會與之摔跤。

謝謝!

+1

有** runTransactionBlock **。或者你可以使用** updateChildValues **方法 – Wolverine

+0

updateChildValues完美工作!提交答案。非常感謝! –

回答

1

對於那些你們誰遇到這一點,並有麻煩的未來 - 答案來自於updateChildValues方法火力地堡提供:

let sevenDayOption = UIAlertAction(title: "Seven Day: $31", style: .default, handler: { 
     (alert: UIAlertAction!) -> Void in 
     let query = ref.queryOrdered(byChild: (FIRAuth.auth()!.currentUser?.uid)!) 
     query.observeSingleEvent(of: .value, with: { (snapshot) in 
      let cardAmount = snapshot.childSnapshot(forPath: "cardAmount").value as! Float 
      let newAmount = cardAmount + 31 
      let newAmountString = String(format:"%.2f", newAmount) 
      ref.updateChildValues(["cardAmount":newAmountString])/*<------ CRITICAL*/ 
     }) 
    }) 

太謝謝你了!

0

試試這個代碼

ref.child("yourKey").child("yourKey").updateChildValues(["cardAmount": yourNewCardAmount]) 

這爲我工作。希望能幫助別人......