替换NSPredicate中的变量

时间:2014-02-15 19:47:39

标签: ios macos core-data nspredicate

我的NSPredicate

[NSPredicate predicateWithFormat:@"$1.employees.@count == 50"] ;

如何通过将NSPredicate替换为$1(或什么都不是),从这个self获取新的[NSPredicate predicateWithFormat:@"self.employees.@count == 50"] ; ?我怎样才能获得谓词

{{1}}

我不想评估我的谓词,我想要一个新的谓词。

1 个答案:

答案 0 :(得分:1)

您可以从“谓词模板”创建谓词。但是,$1无效 谓词模板中的变量和

[NSPredicate predicateWithFormat:@"$1.employees.@count == 50"]

实际上会导致运行时异常。但是以下工作并且应该证明这个想法:

NSPredicate *p1 = [NSPredicate predicateWithFormat:@"$foo.employees.@count == 50"] ;
NSLog(@"%@", p1);
// $foo.employees.@count == 50

// Substitute $foo by self:
NSPredicate *p2 = [p1 predicateWithSubstitutionVariables:@{@"foo": [NSExpression expressionForEvaluatedObject]}];
NSLog(@"%@", p2);
// employees.@count == 50

// Substitute $foo by "bar":
NSPredicate *p3 = [p1 predicateWithSubstitutionVariables:@{@"foo": [NSExpression expressionForKeyPath:@"bar"]}];
NSLog(@"%@", p3);
// bar.employees.@count == 50    

有关详细信息,请参阅"Creating Predicates Using Predicate Templates" 在“谓词编程指南”中。