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!!!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…