2010-12-22 4 views
3

Ich verwende NSPredicates, um Entitäten basierend auf einem Namensattribut abzurufen. Das Erstellen eines Prädikats für Namen, die mit Buchstaben beginnen, war einfach (@ "name BEGINSWITH% @", searchLetter), aber jetzt möchte ich alle Entitäten mit einem Namen abrufen, der mit einem numerischen Wert oder besser einem nicht alphabetischen Zeichen beginnt.Wie erstellt man ein NSPredicate, um Einträge mit führenden numerischen Werten zu finden?

Was wäre der geeignete Prädikatausdruck hier?

Im Moment möchte ich nicht zu tief in Prädikat-Programmierung gehen, da dies alles ist, was ich gerade brauche und die Zeit vergeht. Also, bitte, zeigen Sie mich nicht auf die Predicate Programming Guide, ich brauche nur diesen Ausdruck .. :)

Vielen Dank Jungs!

Antwort

5

Wenn die MATCHES Bediener nicht mit einer Abrufanforderung nicht funktionieren, dann werden Sie im wesentlichen Sachen tun müssen manuell:

NOT(name BEGINSWITH[cd] 'a' OR name BEGINSWITH[cd] 'b' OR ... OR name BEGINSWITH[cd] 'z') 

, dass alles bekommen würde, die nicht mit einem Buchstaben beginnt. Ebenso:

name BEGINSWITH[cd] '0' OR name BEGINSWITH[cd] '1' OR ... OR name BEGINSWITH[cd] '9' 

Würde alles bekommen, was mit einer Nummer beginnt.

bearbeiten Kommentar dazu aufgefordert eine andere Idee:

Wenn Sie den ersten Buchstaben des name extrahieren könnte, könnten Sie tun:

NOT(name[0] IN %@), arrayOfLetters 

(name[0] das erste Zeichen von name zu sein, und arrayOfLetters ein NSArray der Buchstaben)

+1

Ich habe es nicht versucht, aber es könnte möglich sein, eine Reihe von Buchstaben zu werfen es, als der Prädikat-Prozessor scheint sie mit anderen Orten ziemlich gut zu machen. 'predicate =" NOT (name BEGINSWITH [cd]% @) ", arrayOfLetters;' Es wäre sowieso hübscher und würde wahrscheinlich schneller geparst werden. Angenommen, es funktioniert natürlich. :) –

1

Sie können 'MATCHES' verwenden, wo Sie eine beliebige Formel (z. B.^[0-9]) zum Vergleichen verwenden können. Aber soweit ich weiß, funktioniert das nicht im Umgang mit Core Data.

Eine andere Lösung wäre die Verwendung des neuen (OS X 10.6, iOS 4.0) predicateWithBlock: und die Überprüfung der Bedingung mit String-Methoden.