Swift UISearchController in Core Data Project verdrahtet, App wird ausgeführt, die Suche wird jedoch nicht aktualisiert

8

Ich habe in den letzten Tagen mit dem Erstellen eines Filters in einem Swift-Projekt für einen TableViewController , der Core Data verwendet, gerungen. Ich habe schließlich herausgefunden, dass ich ein UISearchController verwenden, ein NSPredicate für das searchController.searchBar , etc. erstellen muss.

Ich fand dieser Beitrag EXTREM hilfreich , aber nachdem ich mein TVC nach diesem Projekt modelliert habe, finde ich "alle Lichter sind an, aber niemand ist zu Hause". Ich kann suchen, Prädikat wird in searchBar erstellt, hinzufügen, entfernen usw., aber die Zellen werden nicht für die Suche aktualisiert. Ich vermisse etwas, aber ich weiß nicht was.

Hier sind die relevanten Teile meines Codes.

%Vor%

Ich denke mein Problem "lebt" hier in diesem Abschnitt. Autocomplete war bisher mein Freund, aber ich sehe " searchIndex " nicht in AutoComplete. Ich denke, ich vermisse etwas, aber ich bin mir nicht sicher, was oder wie.

Wenn Sie es bis hierher geschafft haben, danke fürs Lesen. Hier ist das GitHub Repo für den Zweig, an dem ich gerade arbeite .

%Vor%

Bearbeiten: Pro @pbasdf, ich füge die TableView-Methoden hinzu.

%Vor%     
Adrian 25.02.2015, 00:13
quelle

1 Antwort

8

Die Probleme liegen in den tabellarischen Datenquellenmethoden numberOfSectionsInTableview: , tableView:numberOfRowsInSection: und tableView:cellForRowAtIndexPath: . Sie benötigen jede dieser Methoden, um unterschiedliche Ergebnisse zurückzugeben, wenn das searchPredicate nicht null ist - ähnlich wie Ihre Methode tableView:commitEditingStyle: . Ich würde filteredObjects zu einer Instanzeigenschaft machen (die am Anfang der Klasse definiert ist), damit alle diese Methoden darauf zugreifen können:

%Vor%

Wenn sich der Suchtext ändert, möchten Sie das Array gefilterterObjekte neu erstellen. Fügen Sie also in updateSearchResultsForSearchController eine Zeile hinzu, um sie basierend auf dem neuen Prädikat neu zu berechnen:

%Vor%

Ich würde auch (der Einfachheit halber) empfehlen, dass beim Aktivieren der Suche die Ergebnisse alle in einem Abschnitt angezeigt werden (andernfalls müssen Sie herausfinden, in wie viele Abschnitte Ihre gefilterten Ergebnisse fallen - möglich, aber ermüdend):

%Vor%

Wenn das searchPredicate nicht gleich null ist, ist die Anzahl der Zeilen im Abschnitt die Anzahl der gefilterten Objekte:

%Vor%

Schließlich, wenn das searchPredicate nicht gleich Null ist, müssen Sie die Zelle mit den gefiltertenObjects-Daten erstellen, und nicht mit dem abgerufenenResultsController:

%Vor%

Nicht sicher, welche Labels usw. Sie in Ihren Zellen haben, also überlasse ich es Ihnen, dieses Bit zu sortieren.

    
pbasdf 25.02.2015, 13:29
quelle