This is how the DB presented over Firebase
Parent
Match
User 1
Opponent : User 2
State : "NotReady"
User 2
Opponent : User 1
State : "NotReady"
I'm trying to update the values of State
(each user individually) with RunTransaction.
What I was trying to do :
- Check that the item haven't removed(is not nil/null)
- If he is exist - update the value
- if he doesnt exists - manipulate UI
if he suddenly deleted - abort the transaction (Possible condition - if two close event running at the same time, one updating "State" and other deletes the all key(
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 } } )
But for some reason - I'm getting currentData that is nil
and going straight to the Abort
. Any suggestions? Thanks!!!