【发布时间】:2016-08-18 08:43:47
【问题描述】:
我的程序中有这段代码应该允许用户点击消息并且分数应该增加一:
super.collectionView(collectionView, didTapMessageBubbleAtIndexPath: indexPath)
let data = self.messages[indexPath.row]
print("They tapped: " + (data.text) + "- " + (data.senderDisplayName))
let rootRef : FIRDatabaseReference = FIRDatabase.database().reference()
let senderID = FIRAuth.auth()!.currentUser!.uid
rootRef.child("messages").observeEventType(.Value, withBlock: { (snap) in
print(senderID)
if snap.exists(){
if let messagesDict = snap.value! as? [String : AnyObject]
{
for each in messagesDict as [String : AnyObject]{
let postID = each.0
if let messageDict = each.1 as? [String:AnyObject]{
if senderID == messageDict["senderId"] as! String{
//Checking for the senderID of the user so that you only increment the score of that particular message post
var userScore = messageDict["score"] as! Int
userScore = userScore + 1
rootRef.child("messages").child(postID).child("score").setValue(userScore)
print(senderID)
print(messageDict["senderId"])
print(userScore)
}
}
}
}
}
})
但是,当运行上述代码并且用户点击消息时,Firebase 中的 score 变量确实会增加,但它不会停止运行。这会导致分数无限增加,这不是我想要的。我希望我的代码一次只在分数上加一个,但这似乎不起作用。任何人都可以帮助我找到我的无限循环,或者提出一种可以更有效地添加到 Firebase 中的分数变量的方法吗?
谢谢!
附:我还知道函数本身不会多次运行,因为 print 语句:print("They tapped: " + (data.text) + "- " + (data.senderDisplayName)) 只打印一次,并返回正确的数据。
【问题讨论】:
标签: swift firebase firebase-realtime-database