2017-02-13 3 views
0

ディテールテキストラベルの値に基づいてテーブルビューのセルをソートするにはどうすればよいですか?私はFirebaseに名前とスコアを持っています。私が引き出していて、最高から最低の順に表示したいのです。テーブルベースのビューセルを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 

} 
+0

なぜ 'cellForRowAtIndexPath'でデータベースクエリを呼び出すのか分かりますか? – CodeChanger

+0

@コードチェンジャー私は学んでいますので、どうやってこれを整理するかについてのお勧めをどうもありがとうと思います。私はテーブルビューのセルのdetailTextLabelとしてFirebaseの値だけを必要とするので、そこに持っていました。 Firebaseの値をviewDIdLoadにロードしてから、各セルに値をロードしますか? – user7371866

答えて

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) 
      } 
     }) 

キャッチこのローカル配列や辞書へとreloadData()方法を使用してテーブルビューでそれを使用。

関連する問題