iOS: NSPredicate работает неправильно

Я пытаюсь выразить параметры поиска предикатом:

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"name CONTAINS [cd] %@  OR code CONTAINS [cd] %@ OR currency CONTAINS [cd] %@ AND continent.paid == %@",searchString,searchString,searchString,[NSNumber numberWithBool:YES]];

Я пытаюсь указать параметры поиска для возможных строковых записей ТОЛЬКО там, где continent.paid==YES. Проблема в том, что последнее выражение игнорируется. Поиск возвращает данные с континента.paid==NO также с правильными данными. Что с этим не так?


person NCFUSN    schedule 19.03.2014    source источник


Ответы (1)


Вы должны установить скобки:

[NSPredicate predicateWithFormat:@"(name CONTAINS [cd] %@  OR code CONTAINS [cd] %@ OR currency CONTAINS [cd] %@) AND continent.paid == %@",
         searchString,searchString,searchString,[NSNumber numberWithBool:YES]];

Насколько мне известно, "И" и "ИЛИ" имеют одинаковый приоритет в предикате и оцениваются слева направо. Поэтому в вашем коде предикат оценивается как true, если одно из выражений CONTAINS истинно.

person Martin R    schedule 19.03.2014
comment
О, Господи, легкий пирог. Просто проблема со скобками. Спасибо, Мартин. Ваш ответ будет принят через 7 минут. - person NCFUSN; 19.03.2014