2012-09-13 61 views
3

在我的代码中,我想检查一下记录是否已经存在,所以我知道是否创建它或更新它。但我遇到了一个问题。问题是当我使用这个:NSPredicate格式字符串不起作用

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

Monolo的答案是正确的,但我会建议使用这种方法,而不是格式之一。这个更快。 – J2theC

回答

5

您的ATTRIBUTE_ID是一个关键字,所以您应该在该部分的格式字符串中使用%K

格式字符串应该是这样的(大写字母K作为在评论中指出):

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

感谢Monolo!一个更正 - 我认为它必须是一个大写的%K才能工作 –