为什么我的 Firebase 事务中的 currentData 始终为零?

Why is the currentData in my Firebase transaction always nil?

这是数据库在 Firebase 上的呈现方式

Parent
      Match
           User 1
                 Opponent : User 2
                 State    : "NotReady"
           User 2 
                 Opponent : User 1
                 State    : "NotReady"

我正在尝试使用 RunTransaction 更新 State(每个用户单独)的值。

我试图做的事情:

但出于某种原因 - 我正在获取 nil 的 currentData 并直接转到 Abort有什么建议吗?谢谢!!!

Firebase 使用 compare-and-set 交易方法,我将在下面进行描述。它解释了为什么您会得到 nil,但不幸的是,这意味着您当前的方法将行不通。

当您调用 runTransactionBlock 时,Firebase 客户端将立即调用您的块,并根据其对位置当前值的最佳猜测。这个最佳猜测可能是正确的,但如果它不知道该位置的当前值,它将是 nil

然后 Firebase 客户端发送它给你的块的当前值和你返回给服务器的值。 Firebase 服务器检查数据库中的当前值是否与客户端的最佳猜测相同。如果是这样,它会写入您指定的新值。如果数据库中的值不同,则服务器拒绝新值并将拒绝和数据库中的实际当前值发送给客户端。

您的块再次被调用,但这次使用新的 "best guess" 作为当前值。

这一直持续到服务器接受操作或尝试次数过多(我认为是 10 或 25 次)。