Основные данные создают NSPredicate для NSNumber, используя что-то похожее на BEGINSWITH

#objective-c #ios #core-data #nspredicate #nsfetchedresultscontroller

#objective-c #iOS #основные данные #nspredicate #nsfetchedresultscontroller

Вопрос:

Я пытаюсь получить результаты из текста строки поиска в основных данных по свойству, которое является NSNumber . В частности, получение объектов из хранилища, идентификационный номер которых «НАЧИНАЕТСЯ С» текста поиска.

В качестве примера, если пользователь вводит число «1» в поле поиска, мой выбранный запрос возвращает объекты, в том числе 1, 12, 14, 19, 100, 149, 1324, и т.д.

К сожалению, я также реализую сортировку в таблице, поэтому при сортировке по этому идентификационному номеру, если он представлен в виде строки в модели данных, сортировка становится: 1,10,100,2,20,200 вместо 1,2,10,20,100,200.

Как я могу получить лучшее из обоих миров здесь, чтобы я мог выполнять поиск по строковой сортировке, но сортировать по числовой сортировке? Должен ли я создавать два свойства в модели данных, строковое и числовое представление одних и тех же данных?

Любая помощь будет высоко оценена.

Rgds, Фелипе

Комментарии:

1. Я решил свою собственную проблему. Вместо преобразования строки поиска в int и использования BEGINSWITH с номером идентификатора слева и search int справа, я смог использовать BEGINSWITH с номером идентификатора слева и строкой поиска справа. Поиск и сортировка работают отлично.

2. Вы должны опубликовать это как ответ и принять его.

3. Оказывается, это не решило мою проблему… Я все еще не могу сортировать по NSNumbers с помощью BEGINSWITH.

Ответ №1:

Я предполагаю, что у вас есть два поля: фактический идентификатор, представляющий собой число, и затем searchIdentifier, представляющий собой строку. Поиск по строке, сортировка по номеру.

Ответ №2:

Хотя это нигде не упоминается в документации Apple, Like также работает с nsnumber.

Например,

 [NSPredicate predicateWithFormat:@"numberField like '%@*'", searchTerm]
  

работает, где numberField является атрибутом основных данных типа NSNumber. При этом извлекаются все записи, где значение числового поля начинается с поискового термина.