2012-09-13 43 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才能工作 –