Как использовать NSFetchedResultsController и UISearchDisplayController

Все вышеперечисленные ответы велики, но я хотел бы прослушивать здесь. Если вы не обнаружили какой-либо проблемы, упомянутой выше, попробуйте очистить рабочую среду. Это сработало для меня.

14
задан burki 3 February 2010 в 21:05
поделиться

3 ответа

Если взглянуть на ваш код, то он там правильный. Я столкнулся с проблемами при использовании этого метода для изменения поиска. Решение: Очистите свой кэш!

Допустим, вы инициировали контроллер fetched result следующим образом. Обратите внимание на свойство cacheName.

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:[self fetchRequest] managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"UserSearch"];

При изменении предиката просто добавьте:

 [NSFetchedResultsController deleteCacheWithName:@"UserSearch"];

Как по волшебству, все будет работать отлично.

Вы также захотите отслеживать, когда контроллер отображения поиска завершит поиск, и сотрете свой предикат.

Хотя эта тема выглядит мертвой, я нашел ее в google, так что, возможно, кому-то это пригодится :)

.
21
ответ дан 1 December 2019 в 09:12
поделиться

Похоже, вам просто интересно в извлечении и отображении объектов. В этом случае вы НЕ используете контроллер дисплея поиска. Контроллер дисплея поиска используется с панелью поиска, чтобы помочь разрешить вводимый пользователем текстовый поиск вашего контента.

Обычно вы используете выбранный контроллер результатов, чтобы помочь в реализации источника данных табличного представления и методов делегирования. Кроме того, вы создаете и используете запрос на выборку для контроллера полученных результатов. Это все шаблон (см. Код шаблона, предоставленный Apple, когда вы создаете новый проект с выбранной опцией «Использовать основные данные для хранения»).

Именно в запросе выборки вы можете создать и указать предикат. Это позволит вам фильтровать объекты, отображаемые в вашей таблице. Например:

// only fetch objects with myAttribute set to someValue
NSPredicate *pred = [NSPredicate predicateWithFormat:@"myAttribute == %@",someValue];
[fetchRequest setPredicate:pred];
1
ответ дан 1 December 2019 в 09:12
поделиться

Согласно документации, вы захотите либо отфильтровать результаты в массив с помощью предиката, либо повторно инициализировать fetchedResultsController.

Важно: вы не должны изменять получить запрос после того, как у вас есть инициализировал контроллер. Для Например, вы не должны изменять предикат или порядок сортировки.

- NSFetchedResultsController

(Я бы прокомментировал ответ простоя, но у меня нет кармы.)

7
ответ дан 1 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: