这可能听起来很愚蠢,但这里是要预测的数据:
@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工作吗?我想将密钥传递给搜索(名称)作为参数......如果我可以,怎么做?
答案 0 :(得分:13)
当使用
中使用%@
将字符串变量替换为格式字符串时,它们被引号括起来。如果要指定动态属性名称,请在格式字符串%K
所以你的谓词应该是
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%K contains[c] %@", key, searchText];