Filterung NSArray von NSDictionary Objekte mit NSPredicate
Ich habe ein NSArray von NSDictionary-Objekte. Ich möchte filter-array basiert auf dem Schlüssel des dictionaries mit NSPredicate. Ich habe dabei so etwas wie dieses:
NSString *predicateString = [NSString stringWithFormat:@"%@ == '%@'", key, value];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
NSArray *filteredResults = [allResultsArray filteredArrayUsingPredicate:predicate];
Dies funktioniert gut, wenn Sie Schlüssel übergeben, in einem Wort: Farbe, Name, Alter. Aber es funktioniert nicht, wenn der key ist multi-Wort, wie: Person, Alter, Name der Person.
Grundsätzlich eine beliebige Taste, die ein Leerzeichen enthält, funktioniert es nicht. Ich habe versucht, indem Sie einfache Anführungszeichen um den Schlüssel in der Zeichenfolge, so wie Sie fertig sind, auf den Wert die Seite, aber das hat nicht funktioniert entweder. Habe auch versucht die doppelten Anführungszeichen, aber ohne Erfolg.
Bitte beraten. Vielen Dank im Voraus.
mögliche Duplikate von NSPredicate format-string funktioniert nicht
InformationsquelleAutor Bittu | 2012-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei der Verwendung eines dynamischen Schlüssel, sollten Sie die
%K
token statt%@
. Sie wollen auch nicht die Anführungszeichen um den Wert token. Sie wird dazu führen, Prädikat zum test auf Gleichheit gegen die wörtliche string@"%@"
anstatt gegenvalue
.Dies ist dokumentiert in der Prädikat Format-String-Syntax guide.
Edit: So, Eine Amin weist darauf hin,
+[NSString stringWithFormat:]
nicht handhaben Prädikat-Formate. Sie möchten[NSPredicate predicateWithFormat:@"%K == %@", key, value]
statt.[NSPredicate predicateWithFormat:]
. Siehe meine Antwort unten.Du hast absolut Recht. Ich nehme an, dass das, was ich bekomme, für den Versuch zu "reparieren" Bittu ' s code erstellen, anstatt es frisch. Ich bin überrascht, dass er sogar akzeptiert meine Antwort wie Sie ist.
Ich war ja schon mit NSPredicate predicateWithFormat: also, es war einfach, es zu tun in dieser Anweisung anstelle von einer separaten Anweisung für die Erstellung eines NSString. Sollte ich das geklärt haben es in einem Kommentar, aber Eine hat es gut 🙂
InformationsquelleAutor Lily Ballard
Für mich, Kevins Antwort nicht funktioniert. Verwendet habe ich:
[cd]
gibt Sie sowohl Fall - und diakritischen-Unempfindlichkeit.InformationsquelleAutor NightFury