2015-02-21 2 views
9

У меня есть представление, которое содержит tableView. Я использую NSFetchedResultsController для отображения моих результатов из Core Data.Как использовать NSFetchedResultsController и UISearchController вместе?

Я хотел бы добавить UISearchController (а не UISearchDisplayController, поскольку этот устарел в iOS 8), но я не знаю, как их связать.

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

Спасибо за помощь, которую вы можете мне дать.

ответ

8

Несколько мыслей ...

При создании resultsController для searchController, вы можете передать ему данные, которые вы хотите найти. Если вы используете NSFetchedResultsController в своей основной таблице, вы можете передать массив fetchedObjects. Затем в ответ на изменения в тексте поиска вы фильтруете массив (вы можете использовать предикат и filteredArrayUsingPredicate для создания отдельного массива с результатами поиска, или вы можете выполнить итерацию по массиву для его создания). Недостатки этого маршрута заключаются в том, что (если вы не реализуете его вручную) результаты поиска не будут разбиты на отдельные разделы, и результаты поиска не будут обновляться автоматически, если базовые данные изменятся (например, на фоновом потоке).

Возможно, у вас может быть второй NSFetchedResultsController: это облегчит использование разделов и, возможно, позволит автоматически обновлять результаты (используя методы делегатов), если ваши данные обновляются в фоновом режиме, например. Но я бы нервничал от сложности, которую она вводит.

Другой вариант, если вы решили применить поиск на месте (то есть указать resultsController = ноль), будет использовать критерии поиска, чтобы обновлять NSFetchedResultsController себя (т.е. внесения изменений в основной предикат и выполнения повторной выборки). Таким образом, таблица поиска выглядит и выглядит точно так же, как и основная таблица (включая разделы, если вы ее используете), но отображаемые строки, очевидно, уменьшаются по мере того, как критерии поиска становятся мельче. Этот параметр должен заботиться о том, чтобы FRC был правильно перестроен и может быть неприемлемым по производительности, если у вас большой набор данных.

+0

Здесь, через пару месяцев, я выполнил третий вариант выше; код намного чище, и мне не нужно переключаться между двумя функциями NSFetchedResultsController. – Koen

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