2017-02-10 51 views
0

我正在使用Swift中的Xcode 8.2.1编写IOS应用程序。目前,我已经为一个实现GeoFire的视图控制器建立了数据库,并成功地将位置添加到数据库中。在一个单独的视图控制器上,我想添加对同一个数据库的引用并将子对象添加到此引用。我想存储不同的数组,可以通过数组名称访问不同的数组。我希望能够添加和删除数据库中保存的数组。另外,我希望能够添加和删除每个单独数组中保存的字符串。如何设计存储阵列的简单Firebase数据库?

,我已经尝试的代码是:

let ref = FIRDatabase.database().reference() 

    let childRef = FIRDatabase.database().reference(withPath: "arrays") 

    let itemsRef = ref.child("arrays") 

    let milkRef = itemsRef.child("array1") 

但是当我运行这段代码,数据库没有更新以显示任何新的孩子。是否有可能完成我的任务?如果是这样,我做错了什么?

如果我的问题不清楚,请让我知道,我愿意详细说明。预先感谢您的任何帮助!

+0

此视频可能会对您有所帮助:https://www.youtube.com/watch?v=XIQsQ2injLo –

+1

您实际上并未撰写任何数据。并且'同一个数据库'是指相同的NODE还是实际上整个Firebase数据库? – Jay

回答

2

阅读:Arrays are evil

一般来说,最好的避免它们因为通常有更好的方式来组织数据。

这里的一些信息:

这将创建一个节点称为child_node,如果你再次运行该代码将它

root 
    child_node: some_value 

一个SOME_VALUE

let ref = FIRDatabase.database().reference() 
let childRef = ref.child("child_node") 
childRef.setValue("some_value") 

结果的价值,它会覆盖现有节点。

一般来说,最好从数据撇清节点的名称它们含有这样扩大一点

let ref = FIRDatabase.database().reference() 
let childRef = ref.childByAutoId() 
childRef.setValue("some_value") 

结果

root 
    -Y8hjj9a99js9jd: some_value 
    -Yi00ksomosooss: some_value //the second time it's run 

然后去远一点

let ref = FIRDatabase.database().reference() 
let childRef = ref.childByAutoId() 
let someData = ["site": "Olympus Mons", "location": "Mars"] 
childRef.setValue(someData) 

结果

root 
    -Y88ujs9mskkms: 
     site: "Olympus Mons" 
     location: "Mars" 

然后你问自己自己,这与数组有什么关系?

这是存储“额外”数据的更好方法。因此,例如,你可以自己节点

root 
    users 
    -Yi8joiomso (uid) 
     g: xxxx 
     l: 
      0: xxx 
      1: xxx 

内存储用户位置或保持到他们在另一个节点,在参考

root 
    users 
    -Yi8joiomso (uid) 
     location: -Yiuhj89ejee 
    location 
    -Yiuhj89ejee 
     g: xxxx 
     l: 
      0: xxx 
      1: xxx 

或保持用户的位置节点

root 
    location 
    userID 
     g: xxxx 
     l: 
      0: xxxx 
      1: xxxx 

非数组结构为查询,检索数据和组织数据提供了更大的灵活性。