2017-05-26 120 views
0

我的代碼我無法從Firebase檢索數據。無法從Firebase數據庫檢索數據

當我在Firebase上添加值時,我看到在我的控制檯上的Firebase數據庫中添加了這些項目。

另外我還創建了監聽器.childAdded,並且我看到在Firebase數據庫中添加了項目。

但是當我呼叫.value它檢索nil結果。

我不知道那裏發生了什麼。

這是我的代碼。

class FirebaseManager { 

    var ref: DatabaseReference? 
    var database: DatabaseHandle? 

    static let shared: FirebaseManager = { 
     Database.database().isPersistenceEnabled = true 
     return FirebaseManager() 
    }() 

    private func initFireabase() { 
     ref = Database.database().reference(withPath: AMUtils.getUDID())   
    } 

    func addToDB(composition: Composition) { 
     initFireabase() 
     ref?.child(String(composition.id)).child("id").setValue(composition.id) 
     ref?.child(String(composition.id)).child("title").setValue(composition.title)  
    } 

    func removeFromDb(composition: Composition) { 
     ref?.child(String(composition.id)).removeValue() 
    } 

    func getCompositonFromDB(onResult: @escaping ([Composition]) -> Void){ 
     initFireabase() 
     var compositions: [Composition] = [] 
     database = ref?.observe(.value, with: { (snapshot) in 
      compositions.removeAll() 
      let value = snapshot.value as? JSON 
      compositions.append(AudioListParser.parseObject(json: value!)) 
      self.ref?.removeObserver(withHandle: self.database!) 
      onResult(compositions) 
     }) 
    } 
} 

getCompositonFromDB()我當我開始視圖控制器調用,這始終是零,甚至我對數據庫值

誰能告訴我,我做錯了什麼嗎?

enter image description here

+0

'snapshot.value'在你的案例中公開了一個'NSDictionary '。我不確定'JSON'類型是什麼,但它不是'FIRDataSnapshot.value'返回的類型:https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/ FIRDataSnapshot#value –

+0

@FrankvanPuffelen public typealias JSON = [String:Any] – pmb

+0

*這總是零*是什麼意思?如果您在觀察線後立即添加*打印(快照)*行,打印什麼? – Jay

回答

0

你改變了數據庫中的規則? 就像你正在驗證你應該爲寫和讀設置非空,如果你不驗證,然後保持它爲null,因爲做上面的完全相反可能會導致一些錯誤!

+0

是的,我改變了它{ 「rules」:{ 「.read」:true, 「.write」:true } } – pmb