Проведя несколько часов, я обнаружил, что невозможно выполнить индивидуальную сортировку в NSFetchedResultsController при поддержке SQLite из следующей статьи.
Пользовательская сортировка NSFetchedResultsController не вызывается
Однако я не смог найти реального решения своей проблемы.
Вот что я пытаюсь сделать.
Предыстория:
у меня есть база данных англоязычных словарей (простой список слов - очень большой) в CoreData. Слова отображаются в UITableView с помощью NSFetchedResultsController.
UITableView имеет связанную панель поиска. Когда пользователь вводит строку в панель поиска, UITableView показывает список отфильтрованных слов.
Зачем мне настраиваемая сортировка:
Когда пользователь вводит строку, скажем, это bre
, я меняю ее на регулярное выражение, b.*r.*e.*
и использую как NSPredicate, а затем выполняю performFetch. Таким образом, все слова, такие как «голый» и «разрыв», будут отображаться в виде таблицы.
По умолчанию слова отображаются в алфавитном порядке. Следовательно, bare
будет стоять перед break
.
Я хочу, чтобы break
находился перед bare
в списке поиска, потому что первые три символа break
точно соответствуют тому, что ввел пользователь.
Возможные идеи:
- Скопируйте результат NSFetchedResultsController в NSArray и выполните настраиваемую сортировку. Я не уверен, насколько быстро NSArray будет работать для большого массива, такого как английский словарь.
- Попробуйте выполнить PerformFetch несколько раз. Например, выше, попробуйте выполнитьFetch для
bre.*
,br.+e.*
,b.+r.+e.*
по порядку и объедините их.
Обе идеи выглядят не очень аккуратно.
Буду признателен, если вы можете предложить какое-либо известное аккуратное и типичное решение для такого рода проблем.