观察Firebase上的数据与检查数组?

时间:2016-08-20 16:59:22

标签: ios swift firebase

我的情况是,我的桌面视图中充满了来自Firebase的名字。

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

我有一个"添加"在文本字段中包含任何内容的按钮,并将该名称添加到firebase及其列表中。

我不想让人们添加他们已添加的名称。

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

users
   209384092834
        Names
           Bob
           Sue

因此,如果用户输入Rob,则会将其添加到"名称"比特,但如果他们输入Bob / Sue,它就不允许他们再次添加。

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

是否有任何强有力的论据可以使用一个而不是另一个。这是一个"重要的事情"运行观察员到firebase?我觉得在这里使用firebase更安全"而不是检查数组...就像用户网是如此或中断,数组还没有填满,他们输入一个名称来添加,添加它,一切都只是一团糟。我甚至不知道是否会发生类似的事情。

这里有什么建议可以采取哪个方向以及为什么?

1 个答案:

答案 0 :(得分:3)

重要提示: - 切勿使用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)
          }
       })
     } 
 })