Как использовать NSPredicate и запрос Fetch для возврата массива объектов, в котором один атрибут содержит определенную строку? - PullRequest
1 голос
/ 01 сентября 2010

Я недавно адаптировал свое приложение iPhone для использования основных данных; после некоторых исследований я обнаружил, что NSPredicate кажется лучшим способом обработки запросов к моей базе данных. В частности, мои запросы будут основаны на 4 отдельных атрибутах. Во-первых, мне нужно запросить базу данных для всех лиц, которые имеют конкретное название округа. Если я ищу все объекты со свойством округа «Амадор», мне также нужен предикат, чтобы возвращать объекты, которые могут иметь «округ Амадор и Батт» в качестве свойства округа. Во-вторых, мне нужно, чтобы Предикат возвращал только те объекты, которые прошли условие округа, которое также проходит второе условие: свойство commodity1 также должно содержать «золото» где-то в своей строке. В-третьих, если свойство commodity1 содержит строку «none», то предикат должен выполнить поиск по goodsity2 для строки «Gold». Если он находит «none» в этом атрибуте, то он должен сделать то же самое для свойства commodity3. Я мог бы, вероятно, структурировать свою базу данных так, чтобы мне не приходилось делать такие сложные запросы, но сейчас мне нужно решение для этого.

1 Ответ

2 голосов
/ 28 января 2011

В разделе Синтаксис строки формата предиката в Руководстве по программированию предиката в документации Apple говорится, что в ваших предикатах для сравнения строк можно использовать операторы "LIKE" и "MATCHES":

LIKE

Левое выражение равно правому выражению:? и * разрешены в качестве символов подстановки, где? соответствует 1 символу, а * соответствует 0 или более символам. В Mac OS X v10.4 подстановочные знаки не совпадают с символами новой строки.

Спички

Левое выражение равно правому выражению с использованием сравнения в стиле регулярных выражений в соответствии с ICU v3 (более подробную информацию см. В Руководстве пользователя ICU для регулярных выражений).

Если я хорошо понимаю ваш вопрос, эти операторы могут помочь решить вашу проблему.

...