向现有NSPredicate添加其他参数

时间:2010-12-18 01:10:06

标签: iphone core-data nsfetchedresultscontroller nspredicate

是否可以采用现有的NSPredicate并为其添加额外的参数?

在我的一个表视图中,我传递的是NSPredicate,用于我的NSFetchedResultsController,如下所示:

[fetchedResults setPredicate:self.predicate];

这很好用,会根据现有的NSPredicate显示内容。但我想通过向tableView添加UISegmentedControl来进一步采取这一步。

- (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 个答案:

答案 0 :(得分:43)

当然!

假设您的对象有一个名为display的属性,它是一个int(或者更确切地说,是一个与您的kDisplayDVDkDisplayVHS等对应的枚举。然后你可以这样做:

- (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)

相关问题