gpt4 book ai didi

ios - Swift Firebase 数据库覆盖

转载 作者:行者123 更新时间:2023-11-30 11:00:03 25 4
gpt4 key购买 nike

我正在使用 Firebase 制作实时通讯工具。目前,每当我按下按钮时,我都希望将一条新消息附加到具有消息索引的 channel ,但目前,每当我按下按钮时,都会创建一条新消息来覆盖旧消息。我知道 setValue 通常是问题所在,但我真的无法说出我做错了什么。 What the database looks like before I add my new message 。这是我添加新消息 here 后的样子,然后是我用来添加到数据库的代码。

@IBAction func sendMessageTapped(_ sender: Any) {
if messageTextField.text == "" {
print("blank")
return
} else {
// First we will update the amount of messages that the channel has.
ref.child("channels").child(channelName!).setValue(["numberOfMessages" : numberOfMessages+1 ])
numberOfMessages += 1
// after we have updated the amount of messages we will try to create a new message.
ref.child("channels").child(channelName!).child("messages").child(String(numberOfMessages)).child("message").child("content").setValue(messageTextField.text)
ref.child("channels").child(channelName!).child("messages").child(String(numberOfMessages)).child("message").child("name").setValue("Buddy")

}
}

最佳答案

好吧,Firebase不是一个传统的基于表的数据库,是一个基于DOCUMENT的数据库。在最顶层有一个称为“集合”的东西,它只是“文档”内容的列表。在您的情况下,您将有几个集合事物作为 channel :“General”、“TopicQ”、“InterstingStuff”等,其中每条消息都作为一个文档。无需拥有文档即可列出其中的消息。

其次,您在使用索引时不需要索引,请将消息 id 作为消息的属性,因为 firebase 支持按字段查询,即使这样也是有问题的,因为如果您将每条消息都设为文档,那么它们如果您愿意,将会有自己的自动生成的 ID。

第三,在你的代码中,你每次都会重写整个文档,这就是你丢失以前的消息的原因,所以如果你保留它,你需要添加一个合并选项:

// Update one field, creating the document if it does not exist.
db.collection("cities").document("BJ").setData([ "capital": true ], merge: true)

关于ios - Swift Firebase 数据库覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53487380/

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