Базовый запрос выборки данных с массивом - PullRequest
3 голосов
/ 15 апреля 2010

Я пытаюсь установить запрос на выборку с предикатом для получения записей в хранилище, атрибуты идентификаторов которых соответствуют массиву идентификаторов, указанных в предикате, например,

NSString *predicateString = [NSString stringWithFormat:@"identifier IN %@", employeeIDsArray];

employeeIDsArray содержит несколько объектов NSNumber, которые соответствуют идентификаторам в хранилище. Тем не менее я получаю сообщение об ошибке «Не удается разобрать строку формата». Этот тип предиката работает, если он используется для фильтрации массива, но, как уже упоминалось, не выполняется для выборки основных данных. Как мне установить предикат, пожалуйста?

Ответы [ 2 ]

11 голосов
/ 15 апреля 2010

NSPredicate не использует форматы, как NSString. Таким образом, результат создания предиката с использованием предварительно созданного предиката предиката не будет допустимым предикатом.

Вы должны сделать это фактическим предикатом:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"identifier IN %@", employeeIDsArray];
[fetchRequest setPredicate:predicate];

См. документацию для получения дополнительной информации о форматах предикатов.

4 голосов
/ 15 апреля 2010

Когда вы создаете эту строку, используя stringWithFormat:, этот метод вставляет массив description (строка, описывающая содержимое массива), где у вас было %@.

Это не то, что вы хотите. Вы не хотите проверять членство в строке, описывающей массив; Вы хотите проверить членство в массиве . Так что не проходите через stringWithFormat: - передайте строку формата и массив непосредственно в predicateWithFormat:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...