Несколько мыслей ...
При создании resultsController
для searchController
, вы можете передать ему данные, которые вы хотите найти. Если вы используете NSFetchedResultsController
в своей основной таблице, вы можете передать массив fetchedObjects
. Затем в ответ на изменения в тексте поиска вы фильтруете массив (вы можете использовать предикат и filteredArrayUsingPredicate
для создания отдельного массива с результатами поиска, или вы можете выполнить итерацию по массиву для его создания). Недостатки этого маршрута заключаются в том, что (если вы не реализуете его вручную) результаты поиска не будут разбиты на отдельные разделы, и результаты поиска не будут обновляться автоматически, если базовые данные изменятся (например, на фоновом потоке).
Возможно, у вас может быть второй NSFetchedResultsController
: это облегчит использование разделов и, возможно, позволит автоматически обновлять результаты (используя методы делегатов), если ваши данные обновляются в фоновом режиме, например. Но я бы нервничал от сложности, которую она вводит.
Другой вариант, если вы решили применить поиск на месте (то есть указать resultsController
= ноль), будет использовать критерии поиска, чтобы обновлять NSFetchedResultsController
себя (т.е. внесения изменений в основной предикат и выполнения повторной выборки). Таким образом, таблица поиска выглядит и выглядит точно так же, как и основная таблица (включая разделы, если вы ее используете), но отображаемые строки, очевидно, уменьшаются по мере того, как критерии поиска становятся мельче. Этот параметр должен заботиться о том, чтобы FRC был правильно перестроен и может быть неприемлемым по производительности, если у вас большой набор данных.
Здесь, через пару месяцев, я выполнил третий вариант выше; код намного чище, и мне не нужно переключаться между двумя функциями NSFetchedResultsController. – Koen