2017-03-07 7 views
2

以下のスニペットには2つの問題があります。TableView重複しているfirebaseの検索クエリ

  1. 私は自分のTableViewに重複を取得しています。

  2. 私が結果を返す何かを検索し、私は結果を返す別のものを探してみました

  3. は、既存の結果は、例えばない新しい結果を示す1になります。私は "ola"を検索し、私のTableViewはolabode、olatunde、olaideのリストを返します。

    b。それから私は "bisi"を検索しました。 "bisi"の一致するクエリが見つかった場合、私はまだ "ola"のクエリ結果を取得します。

    func searchView(_ searchView: AZSearchViewController, didTextChangeTo text: String, textLength: Int) { 
        self.resultArray.removeAll() 
        searchView.reloadData() 
    
    guard text != "" else { 
        return 
    }  
        AppFirRef.userRef.queryOrdered(byChild: "username") 
         .queryStarting(atValue: text) 
         .queryEnding(atValue: text + "\\uf8ff") 
         .observe(.value, with: { (snapshot) in 
          if (snapshot.value is NSNull) { 
           print("not found") 
          } else { 
           print("found") 
           self.resultArray.removeAll() 
           searchView.reloadData() 
    
           print("\(snapshot.value)") 
           for case let snap as FIRDataSnapshot in snapshot.children { 
            guard let value = snap.value as? [String : Any] else { continue } 
            //print("\(snap.key)") 
            print(value) 
            let user = LContact(value: value, searchUserId: snap.key) 
            self.set.add(user) 
            if let username = user.username{ 
             self.resultArray.append(username.lowercased()) 
             searchView.reloadData() 
            } 
           } 
    
          } 
         }) 
    
    } 
    
+0

TableViewSource新しいデータを追加する前に? – apineda

+0

@apinedaたとえば、2つの異なるデバイスを使用すると、デバイスAが「users」ノードに追加されていると、デバイスBのユーザーのリストに重複が発生します。重複がなくなる前にデバイスbを再起動します。したがって、基本的に私のクエリは、「users」ノードが別のデバイスから参照されている場合に重複して返されます – SimpiMind

答えて

1

それは遅すぎることはなく、説明のためにthis questionに私の答えを参照してください

.observeSingleEvent(of: .value, with: { (snapshot) in 
... 
)} 

.observe(.value, with: { (snapshot) in 
... 
)} 

を変更する場合があります。参照パスのデータが変更されるたびに(たとえ別のデバイス上の誰かが参照パス内のデータを変更したときなど)、アレイに追加しているため、あなたにも適用されます。

関連する問題