Ios 按子值对表格视图单元格中的Firebase数据排序

Ios 按子值对表格视图单元格中的Firebase数据排序,ios,sorting,firebase,firebase-realtime-database,Ios,Sorting,Firebase,Firebase Realtime Database,为什么代码不按子级“scoreTotal”的值对数据进行排序?我尝试过按scoreTotal值排序和按子级“scoreTotal”查询,但它仍然按单元格标题的字母顺序显示在表视图中 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withI

为什么代码不按子级“scoreTotal”的值对数据进行排序?我尝试过按scoreTotal值排序和按子级“scoreTotal”查询,但它仍然按单元格标题的字母顺序显示在表视图中

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

    let comp = comps[indexPath.row]

    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)
        self.comps.sorted(by: {$0.scoreTotal > $1.scoreTotal})

    })

    cell.textLabel?.text = comp.name

    return cell

}

您正在查询单元渲染函数中需要使用该数据的数据。Firebase调用是异步的。您必须在需要数据之前调用它,然后在数据到达时响应它

调用
cellForRowAt
时,不要忘记
UITableView
会回收单元格。您不应该(不允许)在该函数中获取对它们的强引用,当然也不应该在该函数中更改表的源数据(
comps[]

每个应用程序都是不同的,但这里的“正确”模式通常是在类中的
viewDidLoad
viewwillbeen
覆盖中查询此数据。当要绘制的新数据到达时,在tableview(或相应的批处理更新函数)上调用
reloadData
。在您的
cellForRowAt
覆盖中,您将立即获得这些数据,并能够正确地渲染这些数据


您肯定应该看看FirebaseUI()。它包括表视图和集合视图的数据源,可为您处理所有这些逻辑,并将使您的生活更加轻松。

您正在查询单元格渲染函数中需要使用这些数据的数据。Firebase调用是异步的。您必须在需要数据之前调用它,然后在数据到达时响应它

调用
cellForRowAt
时,不要忘记
UITableView
会回收单元格。您不应该(不允许)在该函数中获取对它们的强引用,当然也不应该在该函数中更改表的源数据(
comps[]

每个应用程序都是不同的,但这里的“正确”模式通常是在类中的
viewDidLoad
viewwillbeen
覆盖中查询此数据。当要绘制的新数据到达时,在tableview(或相应的批处理更新函数)上调用
reloadData
。在您的
cellForRowAt
覆盖中,您将立即获得这些数据,并能够正确地渲染这些数据

您肯定应该看看FirebaseUI()。它包括表视图和集合视图的数据源,它们为您处理所有这些逻辑,并将使您的生活更加轻松