向现有NSPredicate添加其他参数

ave*_*ged 13 iphone core-data nspredicate nsfetchedresultscontroller

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

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

[fetchedResults setPredicate:self.predicate];
Run Code Online (Sandbox Code Playgroud)

这工作正常,将根据现有的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;
        }
Run Code Online (Sandbox Code Playgroud)

根据用户选择的细分,我想在现有的NSPredicate中添加一个参数.这是可能吗?

Dav*_*ong 45

当然!

比方说,你的对象有一个属性称为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];
}
Run Code Online (Sandbox Code Playgroud)

所以,如果[self predicate](foo = @"bar" OR baz > 42),你的新谓词将是display = 1 AND (foo = @"bar" OR baz > 42)