我正在使用Swift中使用Xcode 8.2.1编写IOS应用程序的代码。目前,我已经为实现GeoFire并成功向数据库添加位置的一个视图控制器设置了数据库。在单独的视图控制器上,我想添加对同一数据库的引用,并将子级添加到该引用。
这个单独的引用我想存储可以通过数组名称访问的不同数组。我希望能够添加和删除数据库中保存的数组。另外,我希望能够添加和删除保存在每个单独数组中的字符串。
我尝试过的代码是:
let ref = FIRDatabase.database().reference() let childRef = FIRDatabase.database().reference(withPath: "arrays") let itemsRef = ref.child("arrays") let milkRef = itemsRef.child("array1")
但是,当我运行此代码时,数据库不会更新以显示任何新的子代。有可能完成我的任务吗?如果是这样,我在做什么错?
如果我的问题仍然不清楚,请让我知道,我将详细说明。预先感谢您的任何帮助!
读这篇文章: 数组是邪恶的
通常,最好避免使用它们,因为通常会有更好的方法来组织数据。
这是一些信息:
这将创建一个名为child_node的节点,并为其分配some_value的值。
let ref = FIRDatabase.database().reference() let childRef = ref.child("child_node") childRef.setValue("some_value")
结果是
root child_node: 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
非数组结构为查询,检索数据和组织数据提供了更大的灵活性。