Невозможно успешно отфильтровать результаты, если использовать OR внутри NSPredicate - PullRequest
0 голосов
/ 05 июня 2018

У меня есть NSArray, и я пытаюсь отфильтровать результаты на основе нижеуказанного запроса:

self->filteredValues =
        [self->AllValues filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.sku contains[cd]%@",text]];

Я могу успешно отфильтровать результаты, если я использую SELF.sku или SELF.name отдельно.

Проблема в том, что когда я использую ИЛИ между запросами, как это, я получил результат сбоя:

 self->filteredValues =
        [self->AllValues filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF.sku contains[cd]%@) OR (SELF.name contains[cd]%@)",text]];

Ошибка: 2018-06-05 12: 39: 55.137706 + 0530 AppName [43371: 14206450] *** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Не удается найти значение () в строке (24« NOBLE WREATH (6)); значение не является строкой »*

Как решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Проверьте строку формата предиката.У вас есть два %@ заполнителя, но только один аргумент, предоставляющий значение.

Бьюсь об заклад, это решит проблему:

[NSPredicate predicateWithFormat:@"(SELF.sku contains[cd]%@) OR (SELF.name contains[cd]%@)", text, text]
0 голосов
/ 05 июня 2018

Там второй аргумент отсутствует в предикате.

self->filteredValues =
    [self->AllValues filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF.sku contains[cd]%@) OR (SELF.name contains[cd]%@)",text, <#second argument#>]];

Установите <#second argument#> в предикате.

...