Swift / FireBase / возрастающее количество детей в FireBase - PullRequest
0 голосов
/ 24 января 2019

Скриншот моей базы данных enter image description here

Я хочу ограничить пользователя вводом только до 5 текстовых сообщений.Поэтому я хочу добавить «1», «2», «3», «4», «5» заказанных детей с сообщением и значением даты.На самом деле я мог бы добиться этого с помощью некоторой манипуляции путем добавления следующего фрагмента кода

        if message0 > 1 && message0 < 7 {
        message0 = message0 - 1
    }

Но если я пропущу эту часть, то когда системная запись данных в Firebase всегда пропускает дочерний элемент «2», а затемнумеровать их в порядке возрастания.

Скриншот базы данных

enter image description here

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

  func sendInputTextToFirebase() { 
        var message0 = MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).observe(.childAdded) { (snapshot) in
            var a = [String]()
            a.append(snapshot.key)
            print(a)
            let b = a.count
            print(b)
                }

    //TODO: make child counting into dbase upto 5 in more elegant way
    if message0 > 1 && message0 < 7 {
        message0 = message0 - 1
    }

    if message0 < 6 {
    let messageString = String(message0)
    let picker = tergetDateTF.text
    let messageT = [
                "message": messageTV.text! as String,
                "Date": picker]
    MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).child(messageString).setValue(messageT)

        } else {

        print("limit exceeded")
        }}}

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вот два решения

1) Прочитайте узел и получите количество детей. Если <6, то разрешите запись </p>

let uid = "some user id"
let usersRef = self.ref.child("textmessages")
messagesRef.child(uid).observeSingleEvent(of: .value, with: { snapshot in
    let count = snapshot.childrenCount
    if count < 6 {
        //write the data
    } else {
        print("You've already got 5 messages")
    }
})

2) Держите счетчик количества сообщений, обновляйте его при добавлении сообщения. Вот структура:

textmessages
  uid_0
    msg_id_0
       msg: "Hello"
    msg_id_1
       msg: "Goodbye"

messagecounter
    uid_0
       msg_count: 2

Когда пользователь входит в систему, считайте его количество сообщений и разрешайте добавление сообщений только в том случае, если число <6 </p>

0 голосов
/ 24 января 2019

Как предполагает пользователь в комментарии, вы можете использовать autoId для добавления своего сообщения, что-то вроде этого:

MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).childByAutoId().setValue(messageT)

Что касается подсчета сообщений, вы можете сделать что-то вроде этого:

Сначала сделайте следующий var глобальной переменной

func sendInputTextToFirebase() { 
    var message0 = MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).observe(.childAdded) { (snapshot) in
        a.append(snapshot.key)
        print(a)
if(a.count < 6) {
    let messageString = String(message0)
    let picker = tergetDateTF.text
    let messageT = [
            "message": messageTV.text! as String,
            "Date": picker]
MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!).childByAutoId().setValue(messageT)
} else {
   print("limit exceeded")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...