NSPredicate проблема с именем столбца - PullRequest
10 голосов
/ 15 октября 2010

Я пытаюсь запросить таблицу с помощью NSPredicate. Вот по сути то, что я делаю:

NSNumber *value = [NSNumber numberWithInteger: 2];
NSString *columnName = @"something_id";

NSLog(@"%@ == %@", columnName, value);
NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%@ == %@", columnName, value];

NSLog выводит то, что я ожидаю ("thing_id == 2 "), но предикат не работает Тем не менее, предикат работает, если я изменю его на:

NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"something_id == %@", value];

Так почему же это не сработает и как я могу это исправить?

Ответы [ 2 ]

31 голосов
/ 15 октября 2010

Руководство по программированию предикатов от Apple гласит:

% @ - это подстановка аргумента var для значения объекта - часто это строка, число или дата.

% K - подстановка var arg для ключевого пути.

Когда строковые переменные подставляются в строку формата с использованием% @, они заключаются в кавычки.Если вы хотите указать динамическое имя свойства, используйте% K в строке формата.

Таким образом, в вашем случае вам нужно поместить% K в качестве пути к столбцу columnName, а не% @, который будетдобавьте кавычки:

NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%K == %@", columnName, value];

Надеюсь, это прояснит ваши сомнения.

1 голос
/ 15 октября 2010

Очень странно, но я думаю, что решил это, выполнив следующее:

NSNumber *value = [NSNumber numberWithInteger: 2];
NSString *columnName = @"something_id";

NSString *predicate = [NSString stringWithFormat: @"%@ == %@", columnName, value];
NSPredicate *refQuery = [NSPredicate predicateWithFormat: predicate];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...