将predicateWithFormat中的参数作为parameter passing给谓词

这可能听起来很愚蠢,但这里是要预测的数据:

@interface Person @property NSString *name; @property NSString *phone; @property NSString *address; @end 

我得到一个NSPredicate,将通过Person Arraysearch,按名称search。 通常情况下,我会使用它

 NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText]; 

但是,我怎样才能使用键(名称)作为参数? 喜欢

 NSString *key = @"name"; NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%@ contains[c] %@", key, searchText]; 

predicate1工作正常,但谓词2没有。 当我用lldb进行debugging时,那两个不同:

 po [predicate1 predicateFormat] name CONTAINS[c] "Eddie" po [predicate2 predicateFormat] "name" CONTAINS[c] "Eddie" 

问题是:我可以使predicate2工作? 我想通过键search(名称)作为参数…如果我可以,怎么样?

从谓词编程指南

当使用%@将stringvariablesreplace为格式string时,它们被引号包围。 如果要指定dynamic属性名称,请在格式string中使用%K

所以你的谓词应该是

 NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%K contains[c] %@", key, searchText];