NSPredicate - case insensitive filtering for multi

2020-07-14 05:52发布

问题:

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?

回答1:

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