【问题标题】:Observing data on Firebase vs. checking an array?在 Firebase 上观察数据与检查数组?
【发布时间】:2025-12-24 08:05:15
【问题描述】:

我遇到了一种情况,我的 tableview 中填充了 Firebase 中的名称。

当视图加载时,我从 firebase 中提取所有必要的名称,将它们加载到一个数组中,并将我的 tableview 建立在该数组的基础上。

我有一个“添加”按钮,它可以获取文本字段中的任何内容并将该名称添加到 firebase 及其列表中。

我不希望人们添加他们已经添加的名称。

我正在提取他们从 Firebase 添加的名称,例如:

users
   209384092834
        Names
           Bob
           Sue

因此,如果用户输入 Rob,它会将其添加到该“名称”位下,但如果他们输入 Bob/Sue,则不允许他们再次添加。

我看到这样做的两种方法是检查用户想要添加的名称是否在我正在填充的数组中,或者检查他们在 firebase 上的 Names 子项下的名称。

是否有任何强有力的论据支持使用其中一种。将观察员运行到 Firebase 是不是“大不了”?我觉得在这里使用firebase比检查数组“更安全”..如果用户网络如此或中断,数组还没有填满,他们输入一个名称来添加,添加它,以及一切只是一团糟。我什至不知道这样的事情会不会发生。

关于采取哪个方向以及为什么采取任何建议?

【问题讨论】:

    标签: ios swift firebase


    【解决方案1】:

    重要 :- 永远不要使用 ArraysTuples 存储在 Firebase 数据库中,总是首选字典

    让你的数据库看起来像这样:-

    { users : {
      209384092834 : {
        Names: {
           Bob  : True,
           Sue  : True 
               }
             }
        }
     }
    

    我建议你使用第三条路径:-

    通过引用该子节点并通过获取该路径的特定快照而不是整个列表来检查该名称是否存在..

    rootRef.child("users").child(timeStamp).child("Names").child(textField.text!).observeEventType(.Value, withBlock: {(snapshotRecieved) in
     if snapshotRecieved.exists()
     {
      //Show Alert that user Exists i.e if user is rob/sue in your case
      }else{
        let ref = rootRef.child("users").child(timeStamp).child("Names")
          ref.observeEventType(.Value, withBlock: {(snapshot) in
    
             if let namesDict = snapshot!.value as? NSMutableDictionary{
    
                  namesDict.setObject("True",forKey:textField.text!)
                  ref.setValue(namesDict)
              }
           })
         } 
     })
    

    【讨论】: