按Firebase中的详细数值对表格视图单元格进行排序

时间:2017-02-13 05:20:17

标签: ios sorting firebase firebase-realtime-database tableview

如何根据详细文本标签中的值对表格视图单元格进行排序?我在Firebase中有姓名和分数,我已经退出并希望按照从最高到最低分的顺序显示。

目前,我正在检索Firebase名称和值,但它们只是按主文本字段中名称的字母顺序显示。我尝试使用{$0.scoreTotal > $1.scoreTotal}按分数值排序,并使用queryOrdered(byChild: "scoreTotal")对Firebase数据进行排序,但似乎都不起作用。

这是代码的表格视图部分:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellMale", for: indexPath as IndexPath)

    let comp = comps[indexPath.row]
    self.comps.sorted(by: {$0.scoreTotal > $1.scoreTotal})


    let dbRef1 = FIRDatabase.database().reference().child("Live Scoring Male/\(String(describing: comp.name!))/scoreTotal")

    dbRef1.queryOrdered(byChild: "scoreTotal").observe(FIRDataEventType.value, with: { (snapshot) in

        let scoreTotal = snapshot.value as! Double

        cell.detailTextLabel?.text = String(scoreTotal)

    })

    cell.textLabel?.text = comp.name

    return cell

} 

1 个答案:

答案 0 :(得分:0)

首先,永远不要将任何服务调用到cellForRowAtIndex并在需要时调用它,就像我们加载视图时使用viewDidLoad()方法将任何数据加载到该控制器中一样。

所以请将上述方法调入viewDidLoad并将数据排序

使用如下所示的FireBase排序:

let ref = FIRDatabase.database().reference(fromURL: <FIREBASE_URL>).child("topics")
        let query = ref.queryOrdered(byChild: "scores")
        query.observe(.value, with: { (snapshot) in
            for childSnapshot in snapshot.children {
                print(childSnapshot)
            }
        })

将其捕获到Local Array或Dictionary中,并使用reloadData()方法在TableView中使用它。