Строка формата 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];

Что я упускаю или делаю неправильно в строке формата?


person Chad Schultz    schedule 13.09.2012    source источник
comment
Ответ Моноло правильный, но я бы рекомендовал использовать этот подход вместо форматного. Этот быстрее.   -  person J2theC    schedule 14.09.2012


Ответы (1)


Ваш ATTRIBUTE_ID является ключом, поэтому вы должны использовать %K в строке формата для этой его части.

Строка формата будет выглядеть так (верхний регистр K, как указано в комментариях):

[NSPredicate predicateWithFormat:@"%K == %@", ATTRIBUTE_ID, idNumber];
person Monolo    schedule 13.09.2012
comment
Спасибо, Моноло! Одно исправление - я думаю, что это должно быть %K в верхнем регистре, чтобы работать - person Chad Schultz; 14.09.2012