NSPredicate格式字符串不起作用

时间:2012-09-13 20:02:34

标签: objective-c cocoa foundation

在我的代码中,我想检查并查看记录是否已存在,因此我知道是创建它还是更新它。但是我遇到了一个问题。问题是当我使用它时:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%@ == %@", ATTRIBUTE_ID, idNumber];
[request setPredicate:pred];

这不起作用。它总是声称没有找到结果。但是,当我像这样重写它时,它工作得很好:

NSExpression *lhs = [NSExpression expressionForKeyPath:ATTRIBUTE_ID];
NSExpression *rhs = [NSExpression expressionForConstantValue:idNumber];
NSPredicate *pred = [NSComparisonPredicate
                                     predicateWithLeftExpression:lhs
                                     rightExpression:rhs
                                     modifier:NSDirectPredicateModifier
                                     type:NSEqualToPredicateOperatorType
                                     options:0];
[request setPredicate:pred];

我在格式字符串中遗漏或做错了什么?

1 个答案:

答案 0 :(得分:5)

您的ATTRIBUTE_ID是密钥,因此您应该在格式字符串中使用%K

格式字符串看起来像这样(注释中指出的大写字母K):

[NSPredicate predicateWithFormat:@"%K == %@", ATTRIBUTE_ID, idNumber];