将键作为参数传递给predicateWithFormat中的参数

时间:2013-10-30 04:29:03

标签: ios cocoa nspredicate

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

@interface Person

@property NSString *name;
@property NSString *phone;
@property NSString *address;

@end

我有一个NSPredicate将搜索Person Array,按名称搜索。通常情况下,我会像

一样使用它
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];

但是如何使用键(名称)作为参数?像

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

谓词1工作正常,但谓词2没有。当我使用lldb调试时,这两者中的不同:

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

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

问题是:我可以使谓词2工作吗?我想将密钥传递给搜索(名称)作为参数......如果我可以,怎么做?

1 个答案:

答案 0 :(得分:13)

来自Predicate Programming Guide

  

当使用%@将字符串变量替换为格式字符串时,它们被引号括起来。如果要指定动态属性名称,请在格式字符串

中使用%K

所以你的谓词应该是

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