Swift / firebase / firebase中孩子数量的增加

时间:2019-01-24 12:24:34

标签: swift firebase firebase-realtime-database

我的数据库截图 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 :(得分:0)

注释中的用户建议您可以使用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")
}

答案 1 :(得分:0)

这是两种解决方案

1)读取节点并获得子计数。如果<6,则允许写入

MUSR_MQADMIN

2)保留消息数量的计数器,添加消息时对其进行更新。这是一个结构:

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

当用户登录时,读取他们的消息计数,并且仅当计数<6时才允许添加消息