2016-12-31 45 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只返回模型(数据源数组)中的项目数。

有无数的例子如何正确使用表视图数据源和委托方法。