Firebase,Swift:`runTransactionBlock()`返回null
每次我运行runTransactionBlock
它给我空 ,虽然有一个节点在那个位置: –
FIRMutableData(最上面的事务)(null)
在线上: – print(totalPost)
func updateTotalNoOfPost(){ let prntRef = FIRDatabase.database().reference().child("TotalPosts") prntRef.observeSingleEventOfType(.Value, withBlock: {(totalSnap) in if totalSnap.exists(){ prntRef.child("noOfTotalPost").runTransactionBlock({ (totalPost: FIRMutableData) -> FIRTransactionResult in print(FIRAuth.auth()!.currentUser!.uid)//Giving me correct userID print(totalPost)//<Null> print(prntRef.child("noOfTotalPost"))//Giving me correct path to that node totalPost.value = totalPost.value as! Int + 1 return FIRTransactionResult.successWithValue(totalPost) }, andCompletionBlock: { (err, TF, snap) in print(err?.localizedDescription) print(TF) print(snap!.value) FIRTransactionResult.abort()// Am i using this right? }) }else{ prntRef.setValue(["noOfTotalPost": 1]) } }) }
我的JSON树结构是这样的: –
{ "TotalPosts" : { "noOfTotalPost" : 1 }, "Users" : { "FBLXPOxBomakPCQuDTilGC7Becu2" : {...}, "1DASWPOxBomakPCdasd1d123au6" : {...},...}}
我正在使用我的数据库的默认安全规则: –
{ "rules": { ".read": "auth != null", ".write": "auth != null" } }
所有我想要的是增加noOfTotalPost
子节点的值每次用户创build一个职位: –
我已经有一个使用observeSingleEventOfType.
的解决方法observeSingleEventOfType.
:
let prntRef = FIRDatabase.database().reference().child("TotalPosts") prntRef.child("noOfTotalPost").observeSingleEventOfType(.Value, withBlock: {(totalSnap) in if totalSnap.exists(){ if let tNo = totalSnap.value as? Int{ prntRef.child("noOfTotalPost").setValue(tNo+1)//Working Fine } }) }else{ prntRef.setValue(["noOfTotalPost": 1]) } })
但不能弄清楚为什么runTransactionBlock
不会工作!
正如@Frank在评论中所说,预计NSNull
最初会返回NSNull
行为,但是如果在那个位置已经有一个值,它将会被再次触发。如果在更新值时有冲突,它会再次触发。
码:-
func updateTotalNoOfPost(completionBlock : (() -> Void)){ let prntRef = FIRDatabase.database().reference().child("TotalPosts") prntRef.child("noOfTotalPost").runTransactionBlock({ (noOfPosts) -> FIRTransactionResult in if let totalPost = noOfPosts.value as? Int{ noOfPosts.value = totalPost + 1 return FIRTransactionResult.successWithValue(noOfPosts) }else{ return FIRTransactionResult.successWithValue(noOfPosts) } }, andCompletionBlock: {(error,completion,snap) in print(error?.localizedDescription) print(completion) print(snap) if !completion { print("The value wasn't able to Update") }else{ completionBlock() } }) }
对于基本概念: –
交易中的数据为空
- 致命错误:从未alignment的原始指针加载
- Cocoapodstesting问题 – 重复“两个之一将被使用。 哪一个是不确定的。“
- 如何使UITableViewCell调整高度以适应其内容?
- stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)在Swift中返回Optional
- UIButton子类@IBAction不工作
- 无法在Xcode中连接IBAction
- 如何检测touchbegan和触摸移动ios SWIFT中的angular度?
- iOS从Swift类/对象重新加载UITableView
- swift prepareForSegue not working / exc_breakpoint(code = exc_i386_bpt subcode = 0x0)