Как фильтровать NSFetchedResultsController (CoreData) с помощью UISearchDisplayController / UISearchBar - PullRequest
144 голосов
/ 17 декабря 2010

Я пытаюсь реализовать поисковый код в своем приложении для iPhone на базе CoreData.Я не уверен, как поступить.В приложении уже есть NSFetchedResultsController с предикатом для извлечения данных для основного TableView.Я хочу убедиться, что я на правильном пути, прежде чем менять слишком много кода.Я запутался, потому что многие примеры основаны на массиве, а не на CoreData.

Вот несколько вопросов:

  1. Нужен ли мне второй NSFetchedResultsController, которыйизвлекает только совпадающие элементы или я могу использовать тот же, что и основной TableView?

  2. Если я использую тот же самый, это так же просто, как очистить кэш FRC и затем изменить предикатв методе handleSearchForTerm: searchString?Должен ли предикат содержать исходный предикат, а также поисковые термины или он помнит, что он использовал предикат для извлечения данных в первую очередь?

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

Если у кого-нибудь есть примеры кода, использующего поиск с FRC, я был бы очень признателенэто!

Ответы [ 11 ]

0 голосов
/ 08 ноября 2013

Я думаю, что у Луки есть лучший подход к этому. См LargeDataSetSample и его причина

Он не использует FetchedResultsController, но использует кеш при поиске, поэтому результаты поиска появляются намного быстрее, когда пользователь вводит больше в SearchBar

Я использовал его подход в своем приложении, и он работает нормально. Также помните, что если вы хотите работать с объектом Model, сделайте его максимально простым, см. Мой ответ о setPropertiesToFetch

...