Как создать NSPredicate для поиска записей с начальным числовым значением? - PullRequest
3 голосов
/ 22 декабря 2010

Я использую NSPredicates для выборки объектов на основе атрибута имени. Создать предикат для имен, начинающихся с букв, было легко (@ "name BEGINSWITH% @", searchLetter), однако теперь я хотел бы получить все объекты с именем, которое начинается с числового значения, или, скорее, не алфавитного символа.

Какое здесь будет подходящее предикатное выражение?

Сейчас я не хочу слишком углубляться в программирование предикатов, поскольку это все, что мне нужно сейчас, и время летит. Так что, пожалуйста, не указывайте мне на Руководство по программированию Predicate, мне просто нужно это выражение ..:)

Большое спасибо, ребята!

Ответы [ 2 ]

5 голосов
/ 22 декабря 2010

Если оператор MATCHES не работает с запросом на выборку, вам, по сути, придется делать что-то вручную:

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

Это получило бы все, что не начинается с буквы. Аналогичным образом:

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

Получит все, что начинается с числа.

edit комментарий вызвал другую идею:

Если бы вы могли извлечь первую букву name, вы могли бы сделать:

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

(name[0] - первый символ name, а arrayOfLetters - NSArray буквенных символов)

1 голос
/ 22 декабря 2010

Вы можете использовать 'MATCHES', где вы можете использовать любое регулярное выражение (например, ^ [0-9]) для сравнения.Но, насколько я знаю, это не работает при работе с Core Data.

Другим решением будет использование нового (OS X 10.6, iOS 4.0) predicateWithBlock: и проверка условия самостоятельно с помощью строковых методов.

...