NSP предикат поиска по нескольким полям - PullRequest
4 голосов
/ 01 июня 2011

Я пытаюсь найти несколько полей.Примерно так:

[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@",  self.searchBar.text];

Выполняется поиск как по полю имени, так и по полю заголовка.

Также, если кто-нибудь знает, как будет выглядеть поиск по шаблону, я был бы признателен за это.тоже.

Я пытался:

 [NSPredicate predicateWithFormat:@"* contains[cd] %@",  self.searchBar.text];

мой код ошибки:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(name contains[cd] %@) OR (title contains[cd] %@"'

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Прежде всего, вы должны указать все проверяемые свойства, поскольку нет фиксированного или универсального списка свойств, а в Objective-C нет реального семантического различия между свойством и любым другим методом.

Во-вторых, чтобы проверить несколько свойств, чтобы увидеть, содержат ли они строку поиска, вы должны использовать OR, а не AND, так как ваш поиск будет удовлетворен, если любое свойств соответствует, а не все .

В противном случае ваш синтаксис выглядит правильным (я предполагаю, что name title в первом подпредикате означает просто name.)

0 голосов
/ 12 июля 2013

Не уверен, что кто-то еще читает этот пост, но я нашел вашу проблему.Вы пропускаете закрывающую ")" во втором предикате.Вот правильный код:

[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@)",  self.searchBar.text];

Редактировать: После тестирования я заметил, что два спецификатора формата работали нормально с одним аргументом формата (см. Код выше).Когда я добавил третий предикат и спецификатор формата (только с одним аргументом формата), он потерпел крах.В любом случае, вы всегда должны иметь одинаковое количество спецификаторов формата и аргументов формата.

...