2014-11-10 3 views
5

Я использую следующий NSPredicate для фильтрации,NSPredicate - регистронезависима фильтрация для нескольких условий

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(firstName CONTAINS %@) OR (lastName CONTAINS %@ )OR (UserName CONTAINS %@) ", myText,myText,myText]; 
NSArray *filtered = [responseArray filteredArrayUsingPredicate:predicate]; 

Он отлично работает, но чувствительно к регистру. Мне нужно, чтобы фильтрация была нечувствительной к регистру.

Я попытался,

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY firstName CONTAINS %@) OR (ANY lastName CONTAINS %@ )OR (ANY UserName CONTAINS %@) ", myText,myText,myText]; 

Но он бросает ошибку

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.' 

Я не могу понять, что это было упомянуто в this answer. Может ли кто-нибудь предложить, что мне следует изменить здесь в приведенной выше фильтрации?

ответ

15

Заменить все CONTAINSCONTAINS[c]. «C» в квадратных скобках означает нечувствительность к регистру. Вы также можете использовать «d», чтобы сделать его диакритическим безчувствительным. Это объясняется в «Руководстве по программированию предикатов».

+0

Это работает спасибо. Я буду рассматривать все мои проблемы с кодированием, вместо того, чтобы видеть документацию на яблоко. [Этот ответ] (http://stackoverflow.com/a/1669433/756941) заставил меня использовать ключевое слово 'ANY' для нечувствительного к регистру. Добавьте ссылку, в которой упоминается в руководстве по программированию Predicate. – NAZIK

Смежные вопросы