【发布时间】:2016-04-20 15:17:46
【问题描述】:
这就是数据库在 Firebase 上呈现的方式
Parent
Match
User 1
Opponent : User 2
State : "NotReady"
User 2
Opponent : User 1
State : "NotReady"
我正在尝试使用 RunTransaction 更新 State(每个用户单独)的值。
我想做什么:
- 检查项目没有被删除(不是 nil/null)
- 如果他存在 - 更新值
- 如果他不存在 - 操作 UI
-
如果他突然删除 - 中止事务(可能的情况 - 如果两个关闭事件同时运行,一个更新“状态”,另一个删除所有键(
removeValue)let path = "Parent/Match/User 1/state" let futureRef = Firebase(url: path) futureRef.runTransactionBlock({ (currentData:FMutableData!) in let value = currentData.value as? String if value != nil { currentData.value = "Ready" return FTransactionResult.successWithValue(currentData) } return FTransactionResult.abort() }, andCompletionBlock: { // Completion Check (error:NSError!, success:Bool, data:FDataSnapshot!) in if error == nil && success && data.value as! String == "Ready" { //Value is not null(not removed) and he is ready ManipulateUI() } else { //Value deleted } } )
但由于某种原因 - 我得到了 nil 的 currentData 并直接转到 Abort。 有什么建议吗?谢谢!!!
【问题讨论】:
标签: ios firebase firebase-realtime-database