Добавить дополнительный аргумент в существующий NSPredicate - PullRequest
13 голосов
/ 18 декабря 2010

Можно ли взять существующий 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 Ответ

43 голосов
/ 18 декабря 2010

Конечно!

Допустим, у ваших объектов есть свойство с именем display, которое является целым числом (или, скорее, перечислением, которое соответствует вашим 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)

...