gpt4 book ai didi

ios - JSQMessages ViewController聊天而不在数据库中创建任何 child

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:06:07 24 4
gpt4 key购买 nike

我在我的 Viewcontroller 中使用了 JSQMessagesViewController。聊天以匿名用户打开。聊天工作正常,但我需要对数据库进行一些更改。因为数据库是它的火力点。当任何消息进入它显示的数据库时,我在我的数据库中创建一个 child ,首先它显示名称为“消息”的 child ,并且在消息下显示所有聊天消息,我想删除这个 child ,直接聊天当它进入数据库时​​应该显示并且还应该直接重新接收所有消息而不会干扰数据库中的任何 child 。我的代码是用来聊天的,

import UIKit
import Firebase

import FirebaseDatabase

@objc class ChatViewViewController: JSQMessagesViewController, UINavigationControllerDelegate{

var ref: DatabaseReference!
var Name : String?


private var messages = [JSQMessage]()
lazy var messageRef = Database.database().reference().child("Message")
var newMessageRefHandle: DatabaseHandle?
lazy var outgoingBubbleImageView: JSQMessagesBubbleImage = self.setupOutgoingBubble()
lazy var incomingBubbleImageView: JSQMessagesBubbleImage = self.setupIncomingBubble()
private var updatedMessageRefHandle: DatabaseHandle?
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Chat Room"
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(addTapped))

self.ref = Database.database().reference(fromURL: "Database URL")

guard let str = UserDefaults.standard.string(forKey: "name") else {
return
}
senderDisplayName = str

self.senderId = Auth.auth().currentUser?.uid as NSString?! as String!

collectionView!.collectionViewLayout.incomingAvatarViewSize = CGSize.zero
collectionView!.collectionViewLayout.outgoingAvatarViewSize = CGSize.zero

observeMessages()
// Do any additional setup after loading the view.

}

发送按钮代码是这样的,

 override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {
let itemRef = messageRef.childByAutoId()
let messageItem = [
"senderId": senderId!,
"senderName": senderDisplayName!,
"text": text!,
]

itemRef.setValue(messageItem)

JSQSystemSoundPlayer.jsq_playMessageSentSound()

collectionView.reloadData()

finishSendingMessage()


}

用于在 UI 中显示消息是这样的,

 private func observeMessages() {
//messageRef = channelRef!.child("messages")


// 1.
let messageQuery = messageRef.queryLimited(toLast:25)

// 2. We can use the observe method to listen for new
// messages being written to the Firebase DB
newMessageRefHandle = messageQuery.observe(.childAdded, with: { (snapshot) -> Void in
// 3
let messageData = snapshot.value as! Dictionary<String, String>

if let id = messageData["senderId"] as String!, let name = messageData["senderName"] as String!, let text = messageData["text"] as String!, text.characters.count > 0 {
// 4
self.addMessage(withId: id, name: name, text: text)

// 5
self.finishReceivingMessage()

}

})

updatedMessageRefHandle = messageRef.observe(.childChanged, with: { (snapshot) in
})
}

这是我的数据库的样子 enter image description here

最佳答案

我不知道我是否完全理解你的问题是什么,但据我所知,你正试图从你的数据库中删除 Message 层。您应该能够通过更改文件顶部的这一行来完成此操作

lazy var messageRef = Database.database().reference().child("Message") 到 ->懒惰的 var messageRef = Database.database().reference()

这将删除该层。如果这不是您描述的问题,请告诉我。🤘🏼

关于ios - JSQMessages ViewController聊天而不在数据库中创建任何 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47351059/

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