我有一个应用程序来购买/出售旧书,每次一本标记为已售出的书我都有这个快速代码来增加Firebase实时数据库中已售书籍的数量。
bookRef.child(book.bookKey!).child("Sold").setValue(true)
statisticsRef.child("SoldBooksNumber").observeSingleEventOfType(FIRDataEventType.Value ,withBlock: { (snap) in
let soldBooksNumber = (snap.value?.intValue)! + 1
statisticsRef.child("SoldBooksNumber").setValue("\(soldBooksNumber)")
})
bookRef和staticsRef是对RTDB中两个节点的两个引用。
我遇到的问题:这段代码工作正常一段时间后,一段时间后价值开始下降,让我们说59到22!我在想是不是因为两个人在同一时间更新,那么它将是60而不是61左右,但不是从59到22!
我想知道是否有人能猜出导致问题的原因,
提前谢谢。
答案 0 :(得分:1)
尝试: -
statisticsRef.runTransactionBlock({ (snap) -> FIRTransactionResult in
if let valueToBeAppended = snap.value as? Int{
snap.value = valueToBeAppended + 1
return FIRTransactionResult.successWithValue(snap)
}else{
return FIRTransactionResult.successWithValue(snap)
}
}, andCompletionBlock: {(error,completion,snap) in
print(error?.localizedDescription)
print(completion)
print(snap)
if !completion {
print("The value wasn't able to Update")
}else{
print("Value updated")
}
})