NSPredicate case-insensitive matching on to-many relationship

Solution 1:

If I understand you correctly, you want your predicate to be true whenever any keywords name matches the search string. For this you need to test with the ANY keyword like this:

[NSPredicate predicateWithFormat:@"ANY keywords.name CONTAINS[c] %@", ...];

This will search the keywords and return true if any of those keywords name contains your search string.

Solution 2:

I believe the answer is:

[NSPredicate predicateWithFormat:@"keywords.name CONTAINS[cd] %@", self.searchString];

String comparisons are by default case and diacritic sensitive. You can modify an operator using the key characters c and d within square braces to specify case and diacritic insensitivity respectively, for example firstName BEGINSWITH[cd] $FIRST_NAME.

Predicate Format String Syntax

Solution 3:

If you is trying to catch only the equals names but with insensitive case, I think it is the best solution

[NSPredicate predicateWithFormat:@"ANY keywords.name LIKE[c] %@", ...];

You helped me a lot. Thanks guys!!!

In my case I did:

[NSPredicate predicateWithFormat:@"ANY name LIKE[c] %@", @"teste"];