Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSPredicate - case insensitive filtering for multiple conditions

I'm using following NSPredicate for filtering,

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

It works fine, but it's case-sensitive. I need the filtering should be case insensitive.

I've tried,

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

But it throws the error

*** 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.'

I can't understand what it was mentioned in this answer. Can anyone suggest what should I change here in the above filtering?

like image 918
Nazik Avatar asked Nov 10 '14 06:11

Nazik


1 Answers

Replace all CONTAINS with CONTAINS[c]. The "c" in square brackets means case insensitive. You can also use a "d" to make it diacritic insensitive. This is explained in the "Predicate Programming Guide".

like image 151
rdelmar Avatar answered Oct 20 '22 20:10

rdelmar