2016-09-16 5 views
2

ボタンを押すと、私はFirebaseから取得している配列で特定のフィルタを実行しています。例えば、そのうちの一つは、次のとおりです。ロード時にFirebaseから配列をソートしていますか?

self.PersonalSearchesList = PersonalSearchesList.sorted{ $0.users > $1.users } 
     self.tableView.reloadData() 

問題は、ビューが最初に私がどこで実行するかわからないapplied..butするフィルタのいずれかを希望していますロードするとき、私は望んだということですフィルタ。

配列がクエリの後に追加されているときにソートを実行すると、情報/セルがすべて誤った情報でジャックアップされます。

observer to firebaseがViewDidLoadで実行されていて、その時点で配列に値が設定されないため、viewDiDLoadで実行できません。

編集:

currentUserFirebaseReference.child("rooms").observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in 
      if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 
       for snap in snapshots { 
        DataService.ds.REF_INTERESTS.child(interestKey).observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in 
         if snapshot.value != nil { 
          if let users = (snapshot.value! as? NSDictionary)?["users"] as? Dictionary<String,AnyObject> { 
           DataService.ds.REF_USERS.child(topUser).child("pictureURL").observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in 
            self.PersonalSearchesList.append(eachSearch) 
           }) 
          } 
         } 
        }) 
       } 
      } 
     } 
     initialLoadOver = true 
    } 

は、だから何ポイントで非同期が、この中で終わりましたか?どの行の終わりの括弧の後には何をする必要がありますか?

+0

配列をデータに追加するfirebase closureのコードを表示します。 –

+0

@NiravDただ編集する – user6820041

答えて

2

あなたは、そのセットのソートされたリストのために、インスタンスを作成することができ、あなたのデータ

var mySortedList = [YourListObject](){ 
    didSet{ 
     self.tableView.reloadData() 
    } 
} 

をリロードすることができ、あなたの追加操作が終了したときに、ちょうどソートそれ。

currentUserFirebaseReference.child("rooms").observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in 
      if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 
       for snap in snapshots { 
        DataService.ds.REF_INTERESTS.child(interestKey).observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in 
         if snapshot.value != nil { 
          if let users = (snapshot.value! as? NSDictionary)?["users"] as? Dictionary<String,AnyObject> { 
           DataService.ds.REF_USERS.child(topUser).child("pictureURL").observeSingleEvent(of: .value, with: { (snapshot: FIRDataSnapshot) in 
            self.PersonalSearchesList.append(eachSearch) 
           }) 
          } 
         } 
        }) 
       } 
       self.mySortedList = PersonalSearchesList.sort({ (element1, element2) -> Bool in 
        return element1.users! > element2.users! 
       }) 
      } 
     } 
     initialLoadOver = true 
    } 
+0

意味があります。私は実際にどこに追加しているのかを示すために編集しました。追加操作がどこで行われたのか正確にはわかりません。 – user6820041

+0

あなたのforループの後に@Hibernia –

関連する問題