NSCompound Предикатное строительство
Скажем, у меня есть этот массив предикатов в feedDays
массив:
<__NSArrayM 0x7ff7f3cd1040>(
feedDay == 1,
feedDay == 2,
feedDay == 4
)
Мне нужно И это с этим statusPredicates
массив:
<__NSArrayM 0x7ff7f3cd1070>(
is_neutered == 0 AND other_status == 0,
is_neutered == 0 AND other_status == 1,
is_neutered == 0 AND other_status == 2,
is_neutered == 0 AND other_status == 3,
)
Как я могу объединить их в один запрос? Я предполагаю, что мне нужно использовать NSCompoundPredicate, но я не могу понять, как получить его и два массива предикатов вместе.
2 ответа
Мне кажется, что объединенный предикат, такой как
feedDay == 1 && feedDay == 2 ...
всегда будет ложным
Таким образом, вы, вероятно, имеете в виду объединить каждый предикат с neutered
условие, чтобы оба условия выполнялись (and
) и объединить эти отдельные группы так, чтобы любая из них была истинной (or
).
Если вы объедините массив в одно большое соединение с and
оно всегда должно быть ложным. Предполагая, что neutered
состояние всегда одинаковое,
NSPredicate *finalPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:
@[[NSPredicate predicateWithFormat:@"is_neutered = 0"],
[NSCompoundPredicate orPredicateWithSubPredicates:feedDays]]];
Это довольно уродливо, верно? Поэтому я предлагаю вам создать массив с возможными значениями для feedDay
и использовать простое
[NSPredicate predicateWithFormat:
@"is_neutered = 0 && feedDay in %@", allowedFeedDays]
Используйте этот код -
NSMutableArray *allPredicates = [[NSMutableArray alloc] initWithArray:feedDays];
[allPredicates addObjectsFromArray:statusPredicates];
NSCompoundPredicate *finalPred = [NSCompoundPredicate andPredicateWithSubpredicates:allPredicates];