2016-12-31 75 views
-1

我目前使用Firebase並試圖獲取節點中的子節點數以確定UITableViewController節的行數。然而,由於呼叫是異步的,它不能在外部正確保存。在異步調用中分配的Swift - 返回值(Firebase)

注意:我在數據庫中爲兒童分配了一個名爲「count」的值,但用於計數兒童的實際函數也是異步的。

這裏是我的代碼:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let userID = FIRAuth.auth()?.currentUser?.uid 
    ref = FIRDatabase.database().reference() 
    var count = 0 
    if section == 0 { 
     ref.child("users").child("merchants").child(userID!).child("menu").child(spirits[section]).observeSingleEvent(of: .value, with: { (snapshot) in 
      let value = snapshot.value as? NSDictionary 
      let count = value?["count"] as? Int 
      print("count in: ", count!) 
     }) 
     print("count out: ", count) 
    } else { 
     count = 0 
    } 
    return count 
} 

這裏是輸出:

算出來:0 算出來:0 算出來:0 算出來:0 算出來:0 計入:1 計入:1 輸入:1 輸入數:1 輸入數:1

Output

我已經通過多個堆棧溢出搜索試圖解釋分派或完成代碼的問題,我無法獲得任何工作。我怎樣才能讓我的計數恢復正常?

回答

0

千萬不要加載numberOf...表視圖數據源方法之一中的數據。獲取viewDidLoadviewWillAppear中的數據並在表格視圖中調用reloadData()

numberOfRowsInSection只返回模型(數據源數組)中的項目數。

有無數的例子如何正確使用表視圖數據源和委託方法。