我有一个表格视图。在每个表格视图中都有从Firebase数据库填充的不同书籍。在每个表视图单元格中,都有一个消息按钮。单击该按钮时,登录用户可以向发布该书的用户发送消息。
@IBAction func sendMessage(_ sender: Any) {
let indexPath = self.selectedIndex
let post = self.posts![(indexPath?.row)!] as! [String: AnyObject]
self.infoID = post["postID"] as? String
performSegue(withIdentifier: "sendMessageToUser", sender: self.userpicuid)
}
override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == "sendMessageToUser", let chatVc = segue.destination as? SendMessageViewController else {
return
}
chatVc.senderId = self.loggedInUser?.uid
chatVc.receiverData = self.userpicuid
chatVc.senderDisplayName = self.userpicuid
chatVc.username = self.username
chatVc.infoID = self.infoID
chatVc.bookName = self.bookName
}
我正在使用JSQMessengerController,当我发送消息时,它会发送给目标用户,但如果用户有多本书,它会向所有书籍发送相同的消息。
override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {
guard let uid = FIRAuth.auth()?.currentUser?.uid else {
return
}
let convoRef = FIRDatabase.database().reference().child("messages").child(convoId!)
let itemRef = rootRef.child("messages").child(convoId!).childByAutoId() // 1
let messageItem = [ // 2
"senderId": senderId!,
"ReceiverId": senderDisplayName!,
"text": text!,
"timestamp": NSDate().timeIntervalSince1970,
"convoId": convoId!,
"infoID": infoID!
] as [String : Any]
itemRef.setValue(messageItem) // 3
itemRef.updateChildValues(messageItem) { (error, convoRef) in
if error != nil{
print(error)
return
}
let userMessagesRef = FIRDatabase.database().reference().child("user-messages").child(self.convoId!).child(senderDisplayName!)
let messageId = itemRef.key
userMessagesRef.updateChildValues([messageId: 1])
let recipientUserMessagesRef = FIRDatabase.database().reference().child("user-messages").child(self.convoId!).child(senderId!)
recipientUserMessagesRef.updateChildValues([messageId: 1])
}
JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4
finishSendingMessage() // 5
isTyping = false
}
我希望消息只发送到我点击的单元格(只有一本书)。所以我的意图是发送"嘿"对于介绍性统计书的消息,但它也将嘿发送到美国......的基本要点
答案 0 :(得分:0)
根据您所描述的内容,我认为问题出在您的Firebase
逻辑中。看起来您在firebase中引用了您的数据,但根据您查找该信息的方式,您可能会有这种重复。如果您查看用于从firebase检索数据的方法,请确保您根据您的convoID进行查询,因为(我认为)"senderId": senderId!, "ReceiverId": senderDisplayName!,
对于两个具有相同的书籍的recipientUserMessagesRef.updateChildValues([messageId: 1])
将是相同的作者。
我不知道这条线正在完成什么 {{1}}但通常将事物设置为硬编码值(1)是一个坏主意。
如果有帮助,请告诉我。