2016-07-19 3 views
0

Я хочу выполнить поиск номера телефона в sqlite db. Телефонная таблица имеет числовое поле, которое содержит строковое значение (например: +1 (2-34) 56-78).Запрос на выборку Coredata с использованием NSPredicate

Если пользователь вводит текст поиска как «234», мне нужно получить телефонные номера только с цифрами (исключая все другие алфавиты или специальные символы в сохраненной строке) с использованием NSPredicate и сравнить его с введенной строкой. Должны ли мы это сделать, используя предикат в запросе выборки?

Я попытался с следующим предикатом и оно не вернуть мне ожидаемый результат:

NSPredicate * предикат = [NSPredicate predicateWithFormat: @ "CONTACTNAME = нуль и подзапрос (phoneList, $ телефон, ANY $ phone.number СОДЕРЖИТ [c]% @). @ count> 0 ", searchText];

Есть ли способ сделать это? Могу ли я использовать регулярное выражение с nspredicate для этого?

+0

Есть ли у телефона один номер или число ко многим? – Willeke

+0

Телефонный стол имеет два поля: номер и ярлык. У контакта может быть много телефонных номеров. Таким образом, здесь «phoneList» - это много отношений «Контакт» с телефонным столом. Я пытаюсь найти контакты со строкой поиска в качестве номера телефона. – JamesDon

+0

SUBQUERY и ЛЮБОЙ ОБРАБОТКИ относятся ко многим. Попробуйте формат '" contactName! = Null И ЛЮБОЙ номер телефонаList.number CONTAINS [c]% @ ", searchText'. – Willeke

ответ

1

NSPredicate не поддерживает этот вид соответствия. Ваша модель основных данных должна включать данные, которые требуется вашему приложению для фильтрации, что может означать дополнительные поля, которые обычно не видны пользователям. Если вам нужно сопоставлять номера без учета нечисловых символов, вы должны добавить поле, содержащее эти данные. Если фактическая строка равна +1 (2-34)56-78, добавьте вторичное поле, в котором вы храните 12345678. Используйте это дополнительное поле в предикате.

Смежные вопросы