2017-02-10 103 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 

非數組結構爲查詢,檢索數據和組織數據提供了更大的靈活性。