2016-06-17 57 views
2

我能夠從Firebase查詢中檢索結果,但我無法檢索它們作爲詞典來填充tableView。下面是我如何保存查詢結果:從Firebase詞典中獲取結果?

var invites: Array<FIRDataSnapshot> = [] 
func getAlerts(){ 

     let invitesRef = self.rootRef.child("invites") 
     let query = invitesRef.queryOrderedByChild("invitee").queryEqualToValue(currentUser?.uid) 
     query.observeEventType(.Value, withBlock: { snapshot in 

      self.invites.append(snapshot) 
      print(self.invites) 

      self.tableView.reloadData() 
     }) 
    } 

印刷self.invites返回如下:

[Snap (invites) { 
    "-KKQWErkyuehmbxom8NO" =  { 
     invitedBy = T2k7Bm9G9RNLcHLvLlKApRbnas23; 
     invitee = dRJ1FqctSfTlLF8iO2ddlc9BANJ3; 
     role = guardian; 
    }; 
}] 

我無法填充的tableView。單元格標籤不顯示任何內容:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

    let inviteDict = invites[indexPath.row].value as! [String : AnyObject] 
    let role = inviteDict["role"] as? String 

    cell.textLabel!.text = role 

    return cell 
} 

任何想法?

謝謝!

編輯:打印字典到控制檯後,我的功能運行,它打印[]。爲什麼它失去了它的價值?

override func viewWillAppear(animated: Bool) { 
     getAlerts() // inside of function prints values 
     print(self.invites) //prints [] 
    } 

編輯2:保羅的解決方案工作!我添加了以下功能讓Firebase「傾聽」結果!我可能要編輯此爲只顯示警報的登錄用戶,但這至少我指出了正確的方向:

override func viewWillAppear(animated: Bool) { 
     getAlerts() 

     configureDatabase() 
    } 

    func configureDatabase() { 

     // Listen for new messages in the Firebase database 
     let ref = self.rootRef.child("invites").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in 
      self.invites.append(snapshot) 
      self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.invites.count-1, inSection: 0)], withRowAnimation: .Automatic) 
     }) 
    } 
+1

在查詢getAlerts函數之外,您應該檢查字典是否不返回零。我一直有同樣的問題。值存儲在函數內,但是一旦我離開它,值返回零 –

+0

感謝您的答覆。我認爲你在做些什麼!我剛剛更新了我的問題。在控制檯運行後,我打印了字典到控制檯,現在它正在打印'[]'。到底他媽發生了什麼?我怎樣才能解決這個問題? – winston

+0

我一直在嘗試自己解決這個問題大約兩天。我將非常關注這個主題。希望有人會想出一個解決方案。在此期間,您可以嘗試使用財產觀察員。它會告訴你你的字典在哪裏設置爲零。我今天自己瞭解了它。 –

回答

0

你的陣列將始終返回[],因爲火力地堡是異步。如果您在Firebase封閉內添加了var invites: Array<FIRDataSnapshot> = [],您將打印出您正在查找的數據,但是我敢肯定,您希望在封閉之外使用該變量。爲了完成這個,你必須在getAlerts()函數中創建一個完成。如果您不確定如何完成Google搜索,那將解決您的問題。