Перезапись базы данных Swift Firebase - PullRequest
0 голосов
/ 26 ноября 2018

Я делаю мессенджер в реальном времени, использующий Firebase.В настоящее время всякий раз, когда я нажимаю кнопку, я хочу, чтобы к каналу добавлялось новое сообщение с индексом сообщения, но в настоящее время, когда я нажимаю кнопку, создается новое сообщение, которое перезаписывает старое сообщение.Я знаю, что setValue обычно является проблемой, но я действительно не могу сказать, что я делаю неправильно. Как выглядит база данных, прежде чем я добавлю свое новое сообщение .Вот как это выглядит после добавления нового сообщения здесь , а затем кода, который я использую для добавления в базу данных.

@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")

    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

хорошо, Firebase не является традиционной базой данных на основе таблиц, это база данных на основе DOCUMENT.На самом верху у вас есть вещь, называемая «коллекцией», которая представляет собой просто список «документальных» вещей.В вашем случае у вас будет несколько элементов коллекции, которые будут служить каналами: «Общие», «TopicQ», «InterstingStuff» и т. Д., И внутри них каждое сообщение будет представлено в виде документа.Не нужно иметь документ, чтобы затем перечислять в нем сообщения.

Во-вторых, вам не нужны индексы, поскольку вы используете их, сделайте id сообщения атрибутом сообщения, потому что Firebase поддерживает запросыпо полю, и даже тогда сомнительно, потому что если вы сделаете каждое сообщение документом, у них будут свои собственные автоматически сгенерированные идентификаторы, если хотите.

В-третьих, в вашем коде вы каждый раз переписываете весь документ,вот почему вы теряете свои предыдущие сообщения, поэтому, если вы сохраните его, вам нужно добавить опцию слияния:

// Update one field, creating the document if it does not exist.
db.collection("cities").document("BJ").setData([ "capital": true ], merge: true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...