Nazik
Nazik

Reputation: 8444

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?

Upvotes: 5

Views: 5638

Answers (1)

rdelmar
rdelmar

Reputation: 104082

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".

Upvotes: 18

Related Questions