NSPredicate enthält-Suche in einem string mit Zahl und Buchstaben
Habe ich NSPredicate
für die Suche durch einige Core Data Objekte. Aber der Schlüssel name
des benutzerdefinierten Objekt enthält sowohl zahlen, dann Buchstaben.
Der string könnte so Aussehen:John 1234 Lennon
oder Ringo Starr
.
Ich normalerweise verwenden würde, die das Prädikat NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Any name CONTAINS[cd] %@",searchString];
Aber, wenn Suche ich für John Lennon
das Prädikat nicht, etwas zurückzugeben, weil es nicht vergleichen kann, wenn es enthält die Zeichen John Lennon
, da fehlt die 1234
. Irgendwelche Tipps, welche Art von Prädikat, die ich verwenden kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tokenise deiner Abfrage , vielleicht ist so einfach wie
Dann bauen Sie eine zusammengesetzte Prädikat.
- Und Futtermittel, die zu Ihrer Abfrage
Im realen Leben würde ich ein bisschen Validierung gegen jeden token zu überprüfen, die gehen, um ein gültiges Prädikat und nicht Abstürzen, oder erstellen Sie eine Sicherheits-Risiko. e.g-Strips spezielle Zeichen wie "* []"
BEARBEITEN:Korrigiert-Prädikat-Typ für die Arbeit mit Fragen, die situation.
andPredicateWithSubPredicates
. Weil einorPredicateWithSubPredicates
geben einANY name CONTAINS[cd] John OR ANY name CONTAINS[cd] Lennon
. In einer großen Datenbank, könnte viele alternativen. Aber das kann UND wird nur geben Sie mir eine.Versuchen Sie es mit WIE anstelle von enthält, und dann können Sie wild-Karten, die zum Beispiel John*Lennon sollte sich in übereinstimmung mit einer Zeichenfolge, die mit John beginnt und endet mit Lennon mit einer beliebigen Anzahl von anderen Zeichen dazwischen. Sie verwenden können ? Stattdessen würde mit nur einem Zeichen für jedes Fragezeichen, wenn Sie möchten mehr Kontrolle über was abgestimmt.
Könnte man split der such-string in ein array von strings, und dann schalten Sie Ihr Prädikat zu suchen für eine beliebige Zeichenfolge im Namen:
"ANY name IN %@",strings
, aber hat nicht funktioniert.