Ich kann kein Problem mit dieser Codezeile sehen. Warum kann es nicht analysieren?NSPredicate kann Formatstring nicht analysieren
[NSPredicate predicateWithFormat:@"(username CONTAINS[cd] %[email protected]) || "
"(userId CONTAINS[cd] %[email protected]) || "
"(firstname CONTAINS[cd] %[email protected]) || "
"(lastname CONTAINS[cd] %[email protected])", searchString]"
Das Protokoll hilft auch nicht.
beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException' Grund: ‚Kann nicht das Format string„(Benutzername ENTHÄLT [cd]% 1 $ @) analysieren || (userId ENTHÄLT [cd]% 1 $ @) || (Vorname ENTHÄLT [cd]% 1 $ @) || (Nachname ENTHÄLT [cd]% 1 $ @) "‘
Edit 1:
okay, es scheint, Wie PrädikatWithFormat "% 1 $ @" nicht versteht. Ich schalte es auf
[... predicateWithFormat:[NSString stringWithFormat:...]] // (same format as above)
Es bestand die Linie. Aber das nächste Problem ist:
self.filteredUserList = [self.userList filteredArrayUsingPredicate:predicate];
beenden app aufgrund nicht abgefangene Ausnahme 'NSUnknownKeyException', Grund: ‚[valueForUndefinedKey:]: das Unternehmen Mitglied ist nicht Schlüsselwert Codierung-konform für den Schlüssel" ein".'
"a" ist das Schlüsselwort, das ich in der searchTextBox eingegeben habe. WUT?
Ich druckte das Prädikat in der Debug-Konsole aus, sieht nichts falsch:
username CONTAINS[cd] a OR userId CONTAINS[cd] a OR firstname CONTAINS[cd] a OR lastname CONTAINS[cd] a
Edit 2:
Okay, Problem mit diesem super hässlich Code gelöst:
[NSPredicate predicateWithFormat:@"(username CONTAINS[cd] %@) || "
"(userId CONTAINS[cd] %@) || "
"(firstname CONTAINS[cd] %@) || "
"(lastname CONTAINS[cd] %@)", searchString, searchString, searchString, searchString];
Was ist, wenn ich das Suchfeld in Zukunft erweitern möchte? Ich muss noch weitere Parameter hinzufügen? mehr ", searchString, searchString, searchString"?
GELÖST
Dank Ewan und Bannings, so dass zwei Optionen auf meine Frage. Ich testete beide, und sie arbeiteten einen Charme. Kann jemand das Unterschied zwischen diesen beiden erklären, und in welchem Fall sollte ich welche Option verwenden?
** Hinweis **
Bannings' Antwort ist in Ordnung, bis mein Suchbegriff einen Apostroph '
enthält, dann die App zum Absturz bringen. Also ich denke, Ewan's ist besser.
Funktioniert perfekt! Das ist das, was ich benötige. Danke – Eddie