2016-09-04 7 views
1

Ich bin auf der Suche nach einer Suchleiste, wo ein Benutzer Benutzer über Firebase durchsuchen kann und eine Tabellenansicht bei der Eingabe aktualisiert, anstatt nur nach genauen Übereinstimmungen zu suchen.Gefilterte Suchanfragen mit Firebase?

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { 
    if searchBar.text == nil || searchBar.text == "" { 
     inSearchMode = false 
     tableView.reloadData() 
    } else { 
     inSearchMode = true 
     let lower = searchBar.text!.lowercaseString 

     filteredPeopleArray = peopleArray.filter({$0.title.hasPrefix(lower) != nil}) 
     tableView.reloadData() 
} 

Dieser Code funktioniert für das, aber was würde dies verlangen, ist auf Last für mich ein Array mit jedem einzelnen Benutzer zu füllen aktuell Feuerbasis und ständig an neue Benutzer anhängen werden, wie sie während der App erstellt werden ist offen.

Ich sehe, dass parse verwendet, um eine "Benutzer finden, wo Schlüssel Zeichenfolge enthält", und Sie würden eine Abfrage in Ihrem TextDidChange analysieren, aber ich sehe nicht so etwas für Firebase. Würden die Daten auch nicht in irgendeiner Weise besteuert werden, um jedes Mal, wenn ein Brief eingegeben wird, eine Anfrage an Firebase zu senden?

Welche Methode wird beispielsweise von Instagram verwendet, wo Sie einige Buchstaben eingeben und eine Liste von Benutzern von einem Server mit diesem Präfix in ihrem Namen zurückgeben? So wie "Bo" könnte eine Liste von Bobs und Bobbys zurückgeben.

Antwort

4

Ich kann nicht kommentieren, aber hier ist ein Artikel, der mir geholfen hat.

https://www.quora.com/How-would-you-search-a-Firebase-Realtime-Database-with-a-substring

Lassen Sie sagen, Sie unter Feuerbasis Daten

{ 
    "lambeosaurus": { 
    "dimensions": { 
     "height" : 2.1, 
     "length" : 12.5, 
     "weight": 5000 
    } 
    }, 
    "stegosaurus": { 
    "dimensions": { 
     "height" : 4, 
     "length" : 9, 
     "weight" : 2500 
    } 
    } 
} 

Das folgende Beispiel findet alle Dinosaurier, deren Name mit dem Buchstaben "b" beginnt.

var ref = new Firebase("https://example.firebaseio.com/"); 
ref.orderByKey().startAt("b").endAt("b\uf8ff").on("child_added", function(snapshot) { 
    console.log(snapshot.key()); 
}); 
+0

So würde ich genau das tut Abfrage in meinem Textfeld eines „textDidChange“ oder was auch immer es ist? Meine Sorge ist, dass eine Anfrage an Firebase auf jedem Tastendruck wird brutal sein .. oder ist das nur was Apps tun, wenn Sie so suchen? –

+0

Wenn Sie einen Link veröffentlichen, erwähnen Sie nicht nur den Link. Enthalten Sie auch, was es enthält, stellen Sie auch Code in Antwort selbst zur Verfügung. –

+1

Ich hätte gerade den Link als Kommentar gepostet, aber ich hatte nicht den Vertreter zu der Zeit, um dies zu tun, aber danke, dass Sie mich @Adarsh ​​ – Callam