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. Проблемът е, че последният израз се игнорира. Търсенето връща данни от continent.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