Ich habe eine Reihe von Wörterbüchern.
Ich möchte das Array basierend auf einem Schlüssel filtern.
Ich habe es versucht:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"];
NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate];
Das funktioniert nicht, ich bekomme keine Ergebnisse. Ich glaube, ich mache etwas falsch. Ich weiß, dass dies die Methode ist, wenn "SPORT" ein Ivar war. Ich denke, es ist wahrscheinlich anders, wenn es ein Schlüssel ist.
Ich konnte jedoch kein Beispiel finden.
Vielen Dank
Aktualisieren
Ich habe die gesuchte Zeichenfolge in Anführungszeichen gesetzt.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"];
Es funktioniert immer noch nicht.
Update 2
Ich habe es gelöst. Ich musste tatsächlich die einfachen Anführungszeichen entfernen, was gegen das zu verstoßen scheint, was der Leitfaden sagt.
Mein eigentliches Problem ist, dass ich ein verschachteltes Array hatte und die Wörterbücher nicht ausgewertet habe. Knochenkopf bewegen.
quelle
Antworten:
Es sollte funktionieren - solange die Datenvariable tatsächlich ein Array ist, das ein Wörterbuch mit dem Schlüssel SPORT enthält
Gefiltert in diesem Fall enthält das Wörterbuch.
(% @ muss nicht in Anführungszeichen gesetzt werden. Dies erfolgt, wenn NSPredicate das Objekt erstellt.)
quelle
Ich weiß, es sind alte Nachrichten, aber um meine zwei Cent hinzuzufügen. Standardmäßig verwende ich die Befehle
LIKE[cd]
und nicht nur[c]
. Der[d]
vergleicht Buchstaben mit Akzentsymbolen. Dies funktioniert besonders gut in meiner Warcraft-App, in der Benutzer ihren Namen "Vòódòó" buchstabieren, sodass es fast unmöglich ist, in einer Tabellenansicht nach ihrem Namen zu suchen. Die[d]
Streifen ihre Akzentsymbole während des Prädikats. Ein Prädikat von@"name LIKE[CD] %@", object.name
whereobject.name == @"voodoo"
gibt also das Objekt mit dem Namen Vòódòó zurück.Aus der Apple-Dokumentation: like [cd] bedeutet "case- und diakritisch-unempfindlich like". Eine vollständige Beschreibung der String-Syntax und eine Liste aller verfügbaren Operatoren finden Sie unter Predicate Format String Syntax .
quelle
quelle
NSPredicate
ist nur in iPhone 3.0 verfügbar.Sie werden das erst bemerken, wenn Sie versuchen, es auf dem Gerät auszuführen.
quelle
Wenn Sie mit Swift 3 ein Array von Wörterbüchern mit einem Prädikat filtern möchten, das auf Wörterbuchschlüsseln und -werten basiert, können Sie eines der folgenden Muster auswählen.
# 1. Mit
NSPredicate
init(format:arguments:)
initializerWenn Sie aus Objective-C stammen,
init(format:arguments:)
bietet es einen Schlüsselwert-Codierungsstil zur Bewertung Ihres Prädikats.Verwendung:
# 2. Mit
NSPredicate
init(block:)
initializerAlternativ können Sie den Initialisierer verwenden, wenn Sie stark typisierte APIs gegenüber streng typisierten APIs bevorzugen
init(block:)
.Verwendung:
quelle
Wenn Sie sich die NSPredicate-Referenz ansehen , müssen Sie Ihr Ersetzungszeichen mit Anführungszeichen umgeben. Beispiel: Ihr aktuelles Prädikat lautet:
(SPORT == Football)
Sie möchten, dass es gelesen wird(SPORT == 'Football')
, daher muss Ihre Formatzeichenfolge sein@"(SPORT == '%@')"
.quelle