You have to set parentheses:
[NSPredicate predicateWithFormat:@"(name CONTAINS [cd] %@ OR code CONTAINS [cd] %@ OR currency CONTAINS [cd] %@) AND continent.paid == %@",
searchString,searchString,searchString,[NSNumber numberWithBool:YES]];
As far as I know, "AND" and "OR" have the same precedence in a predicate, and are evaluated
from left to right. Therefore in your code, the predicate evaluates to true
if one
of the "CONTAINS" expressions is true.