runTransactionBlock currentData为null

时间:2016-12-22 21:11:10

标签: swift firebase firebase-realtime-database

我有这个功能试图运行事务来更新Firebase值:

if opponentPoints < self.points {
                        print("the host won")
                        refPoints.runTransactionBlock({ (currentData:FIRMutableData) -> FIRTransactionResult in

                            print("currentData", currentData.value!)
                            if var pointsToUpdate = currentData.value as? [String : Any] {
                                var pointsUp = pointsToUpdate["points"] as! Int

                                pointsUp += 3
                                pointsToUpdate["points"] = pointsUp


                                currentData.value = pointsToUpdate

                                return FIRTransactionResult.success(withValue: currentData)
                            }

                            return FIRTransactionResult.success(withValue: currentData)
                        })

我有这个结构:

 users
      uid
        points
        name
        etc.

问题在于,当我尝试打印currentData时,结果为null。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

当您启动事务时,会立即调用事务处理程序,并使用客户端对数据当前值的最佳猜测。这通常是if(collision) return false

Firebase客户端然后将最佳猜测(null)和您的值发送到服务器。服务器检查,意识到当前值是错误的并拒绝更改。在拒绝中,它会告诉客户当前的位置值。

Firebase客户端然后再次调用您的事务处理程序,但现在使用对当前值的新的最佳猜测。

长话短说:您的事务处理程序需要准备好接收null作为当前值。