我正在尝试使用NSPredicate查询表。这基本上就是我在做的事情:
NSNumber *value = [NSNumber numberWithInteger: 2];
NSString *columnName = @"something_id";
NSLog(@"%@ == %@", columnName, value);
NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%@ == %@", columnName, value];
NSLog打印出我期望的内容(“something_id == 2”),但谓词不起作用。 但是,如果将谓词更改为:
,则谓词可以正常工作NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"something_id == %@", value];
那么为什么这不起作用,我该如何解决呢?
答案 0 :(得分:31)
The Predicate Programming Guide from Apple说:
%@是一个var arg替换 对象值 - 通常是一个字符串,数字, 或约会。
%K是var arg替换 一个关键的路径。
当字符串变量时 被替换为格式字符串 使用%@,它们被包围 引号。如果你想 指定动态属性名称,使用 格式字符串中的%K。
因此,在您的情况下,您需要将%K作为键路径放入columnName,而不是%@,它将添加引号:
NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%K == %@", columnName, value];
希望这清楚你的怀疑。
答案 1 :(得分:1)
非常奇怪,但我想通过以下方式解决了这个问题:
NSNumber *value = [NSNumber numberWithInteger: 2];
NSString *columnName = @"something_id";
NSString *predicate = [NSString stringWithFormat: @"%@ == %@", columnName, value];
NSPredicate *refQuery = [NSPredicate predicateWithFormat: predicate];