gpt4 book ai didi

ios - 从 Firebase 中删除表格 View 单元格

转载 作者:行者123 更新时间:2023-11-28 10:13:26 24 4
gpt4 key购买 nike

我有一个聊天应用程序。用户可以在应用程序中选择另一个用户与之聊天。一旦一个用户向另一个用户发送消息,他们的附加消息就会显示在 TableView Controller 中,当您单击 TableView 单元格时,您将进入一个详细的 Controller 。

  override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {
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!
] as [String : Any]

itemRef.setValue(messageItem) // 3

JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4

finishSendingMessage() // 5
isTyping = false
}

因此只有正在聊天的两个用户才能查看消息。但我希望一个用户能够删除他们应用程序中的表格 View 单元格(消息),但是当他们这样做时,它会在 Firebase 中删除,这意味着它也会在另一个用户的应用程序中删除,但我希望它只在删除消息的用户。以下是如何附加消息以在 tableview Controller 中显示

  func loadData()
{

FIRDatabase.database().reference().child("messages").observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in

if let postsDictionary = snapshot .value as? [String: AnyObject] {

for post in postsDictionary {
let messages = post.value as! [String: AnyObject]
for (id, value) in messages {
let info = value as! [String: AnyObject]


let convoId = info["convoId"]
let toId = info["ReceiverId"] as! String!
let fromId = info["senderId"] as! String!


if (toId == self.loggedInUserUid || fromId == self.loggedInUserUid) {

let ref = FIRDatabase.database().reference().child("messages").child(convoId as! String)
ref.observe(.childAdded, with: { (snapshot) in



if let dictionary = snapshot.value as? [String: AnyObject] {
let message = Message(dictionary: dictionary)


if let receiver = message.convoId {
self.messagesDictionary[receiver] = message

self.messages = Array(self.messagesDictionary.values)
print(self.messages)
self.messages.sort(by: { (message1, message2) -> Bool in


return (message1.timestamp?.int32Value)! > (message2.timestamp?.int32Value)!

})
}

//this will crash because of background thread, so lets call this on dispatch_async main thread
DispatchQueue.main.async(execute: {
self.MessageTableView.reloadData()
})
}

}, withCancel: nil)}
}

}}})

}

最佳答案

如果对 Firebase 实时数据库节点进行了更新,那么在该节点上读取的任何用户都会看到相同的值(如果安全规则允许用户读取该节点)。因此,要回答您的问题 - 您不能真正对数据库路径进行用户特定更新。

话虽如此,在您的情况下,您可以执行以下操作之一:-

  1. 您可以在客户端删除您要删除的内容,这样它就不再可见。但是,这不会删除数据库中的数据,下次从同一路径下载时您会再次看到它。

  2. 您可以为两个用户设置单独的对话路径,并将相同的消息存储在这两个位置而不是公共(public)位置。在这种方法中,您将复制数据。但是,如果您想进行特定于用户的更改,那么这不仅仅是为您完成的。

关于ios - 从 Firebase 中删除表格 View 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com