2011-02-07 2 views
-1

У меня есть UISearchBar, где пользователь может вводить текст. В основном это динамический поиск имени компании. (загружается из ext API), например. если пользователь набрал «MIC», он покажет AMIC, BMIC, CMIC, ... MICROSOFT.Фильтрация результатов UISearchbar

Я использую ниже код

NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

Мой вопрос является; 1. Это лучший подход для фильтрации? Т.е. для имени comp следует использовать имя Name с именем OR Name, которое является текущим подходом. 2. Поиск не работает для пробелов. например он не возвращает результатов для «COMP NAME»

Я добавлю комментарии для получения дополнительной информации по мере получения ответов. Пожалуйста, предложите.

+0

Весь ваш код возвращает NSRange. Как вы фактически выполняете поиск? – Abizern

+0

Я использую ext API, который возвращает мне результаты. Я храню их в массиве, а также делаю копию массива с отфильтрованными результатами. – testndtv

+0

Итак, что показывает код, который вы указали, так как ваш внешний API возвращает результаты? – Abizern

ответ

1

Имея только одну строку кода, сложно сказать, будет ли ваша поисковая реализация «наилучшим подходом» - предоставление дополнительной информации было бы полезно. Например, мы даже не знаем, откуда приходит переменная sTemp или что она содержит.

Это говорит:

  1. Если ваши результаты действительно приходят из внешнего API, он может предоставить вам ускорение, чтобы отправить строку поиска в этот API и это сделать поиск ближе к источнику данных - если вы используете кеш и выполняете строковое сканирование во всем результирующем наборе, вы увидите некоторые замедления производительности по мере увеличения размера набора данных. Если вы настроили локальный поиск, то да, поиск без учета регистра, вероятно, является вашим лучшим вариантом.
  2. Ожидаемые результаты для "COMP NAME"? Я буду дико предполагать, что у вас есть компания под названием «НАЗВАНИЕ КОМПАНИИ», и хотите, чтобы ваш сокращенный поиск «COMP NAME» попал в «НАЗВАНИЕ КОМПАНИИ». Тогда ваша проблема заключается в том, что вы выполняете сравнение по всей строке, а не по частям - «НАЗВАНИЕ КОМПАНИИ» не содержит подстроку «COMP NAME», даже в случае без учета регистра. Вместо этого вам нужно разбить строку поиска на пробелы, а затем проверить каждую компанию, если имя содержит все подстроки вашего запроса. В этом примере «НАЗВАНИЕ КОМПАНИИ» содержит как подстроки «COMP», так и «NAME», чтобы они соответствовали друг другу.
+0

Я не хочу аббревиатуры. Я просто хочу, чтобы, если кто-то набирает «ABC XYZ», он должен иметь возможность найти это .., в настоящее время, если в названии компании есть какие-либо пробелы, он не находит этот результат , например. для "ГОСУДАРСТВЕННОГО БАНКА" – testndtv

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