NSPredicate поиск через запятую значение с массивом
Имейте поданную сущность под названием "keyword"
который содержит значение через запятую, как "8275,8276,8277"
, Теперь с помощью NSPredicate ищите тех пользователей, чье ключевое слово, совпадающее с этим и передаваемое значение, является NSArray. Попытка получить с помощью (keywords contains[cd] %@)
который работает одно значение, не работает для массива.
Предикат такой,
[NSPredicate predicateWithFormat:@"((eventId == %@) AND (keywords contains[cd] %@) AND (attendeeIsVisible == %@))",self.appDelegate.currentEvent.entityId,selectedTagID,[NSNumber numberWithInt:1]]
После печати предиката это похоже на -
eventId == 18230 AND keywords CONTAINS[cd] {"8275", "8276", "8277"} AND attendeeIsVisible == 1
Попытка составить предикат также нравится
NSMutableArray *parr = [NSMutableArray array];
for (id locaArrayObject in selectedTagID) {
[parr addObject:[NSPredicate predicateWithFormat:@"keywords contains[cd] %@ ",locaArrayObject]];
}
predicate = [NSPredicate predicateWithFormat:@"((eventId == %@) AND (keywords contains[cd] %@) AND (attendeeIsVisible == %@))",self.appDelegate.currentEvent.entityId,selectedTagID,[NSNumber numberWithInt:1]];
NSPredicate *predicateObj = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate, parr]];
Не работает также. Любая идея, где я делаю неправильно.
1 ответ
Решение
Вы должны удалить keywords contains[cd] %@
от твоего predicate
затем CompoundPredicate
работает для вас.
NSMutableArray *parr = [NSMutableArray array];
for (id locaArrayObject in selectedTagID) {
[parr addObject:[NSPredicate predicateWithFormat:@"keywords contains[cd] %@ ",locaArrayObject]];
}
NSPredicate *eventPredicate = [NSPredicate predicateWithFormat:@"((eventId == %@) AND (attendeeIsVisible == %@))",self.appDelegate.currentEvent.entityId,[NSNumber numberWithInt:1]];
NSPredicate *keywordPredicate = [NSCompoundPredicate orPredicateWithSubpredicates: parr];
//Now use below predicate with your array
predicate = [NSCompoundPredicate orPredicateWithSubpredicates: [eventPredicate, keywordPredicate]];