即使将数据存储在Firebase上,应用程序也会将数据重置为零

时间:2019-07-13 19:44:14

标签: ios swift firebase firebase-realtime-database

我有一个基本上是一个计算器的应用程序,用户可以将自己从某些游戏中赢得的总金额加起来。当我输入的数字不是整数时,例如“ $ 1.25”,它在firebase上保存为“ $ 1.25”,但是当我关闭应用程序并重新打开时,该值将重置为$ 0.00,但在firebase上存储为$ 1.25”。 如果我用整数做同样的事情-例如“ $ 1”,然后关闭应用程序并打开,则“ $ 1”将保留在应用程序上。

//add local data
        let gameKey = gameNames[addWinningsView.tag]
        let newValue = amountList[addWinningsView.tag] + (Double(addWinningsAmount.text!) ?? 0)
        UserDefaults.standard.set(newValue, forKey: gameKey)
        UserDefaults.standard.synchronize()

        //Update UI
        loadTotalAmount()

        //update to firebase
         let uuid = UIDevice.current.identifierForVendor!.uuidString
        let ref = Database.database().reference().child("app_data/user_total_won/\(uuid)/\(gameKey)")
        ref.setValue(newValue)

从Firebase加载数据的代码

//Load winning points
        let uuid = UIDevice.current.identifierForVendor!.uuidString
        Database.database().reference().child("app_data/user_total_won/\(uuid)").observeSingleEvent(of: .value, with: {(snapshot) in
            let dict = snapshot.value as? [String : AnyObject] ?? [:]

            for game in gameNames {
                let amount = dict[game] as? Int ?? 0
                UserDefaults.standard.set(amount, forKey: game)
                UserDefaults.standard.synchronize()
            }
            self.loadTotalAmount()
        }

预期结果:从Firebase检索的数据不仅仅是整数。

1 个答案:

答案 0 :(得分:1)

从Firebase检索值时,可选地将其强制转换为as? Double而不是Int,这样您就不会只获取整数。

要解决此问题,如果您要将金额保存为let amount = dict[game] as? Int ?? 0在Firestore中,请将let amount = dict[game] as? Double ?? 0更改为Double