是否可以采用现有的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中添加一个参数。这有可能吗?
答案 0 :(得分:43)
当然!
假设您的对象有一个名为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)