5

这可能听起来很傻,但这里是要断言的数据:

@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 工作吗?我想将搜索(名称)的键作为参数传递......如果可以,怎么做?

4

1 回答 1

14

来自谓词编程指南

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

所以你的谓词应该是

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%K contains[c] %@", key, searchText];
于 2013-10-30T04:31:51.153 回答