Добавьте дополнительный аргумент в существующий NSPredicate
Можно ли взять существующий NSPredicate и добавить к нему дополнительный аргумент?
В одном из моих табличных представлений я передаю NSPredicate для использования в моем NSFetchedResultsController, например:
[fetchedResults setPredicate:self.predicate];
Это прекрасно работает и покажет контент на основе существующего NSPredicate. Но я хочу сделать еще один шаг, добавив UISegmentedControl в tableView.
- (IBAction)segmentChange:(id)sender {
switch (selectedSegment) {
case kDisplayDVD:
// Add argument to existing NSPredicate
break;
case kDisplayVHS:
// Add argument to existing NSPredicate
break;
default:
break;
}
В зависимости от того, какой сегмент выбран пользователем, я хотел бы добавить аргумент в существующий NSPredicate. Возможно ли это?
Ответы
Ответ 1
Конечно!
Скажем, что ваши объекты имеют свойство display
, что int (или, вернее, перечисление, соответствующее вашим kDisplayDVD
, kDisplayVHS
и т.д.). Затем вы можете сделать:
- (IBAction) segmentChange:(id)sender {
NSPredicate * newCondition = [NSPredicate predicateWithFormat:@"display = %d", selectedSegment];
NSPredicate * newPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[self predicate], newCondition, nil]];
[self setPredicate:newPredicate];
}
Итак, если [self predicate]
- (foo = @"bar" OR baz > 42)
, ваш новый предикат будет display = 1 AND (foo = @"bar" OR baz > 42)