2

Я ударяю головой, пытаясь понять что-то в Core Data, которое, как мне кажется, должно быть простым, и мне нужна помощь.Основные данные, работающие с подмножеством полного хранилища данных ... КАК?

У меня есть хранилище данных, которое содержит данные за последние два года, но в моем приложении у меня есть определенные критерии, так что пользователь работает только с подмножеством этих данных (т. Е. Только за последний месяц). Я создал предикаты для генерации запроса на выборку, и все это работает нормально.

Моя проблема в том, что я хочу запустить некоторые дополнительные предикаты для этого подмножества данных (т. Е. Мне просто нужны объекты с именем = Sally). Я бы хотел сделать это без повторного запуска исходного предиката с дополнительным предикатом (в NSCompoundPredicate); Я бы предпочел просто запустить его на подмножестве уже созданных данных.

Могу ли я запустить предикат по результатам выборки?

Является ли формат предиката таким же, как для начальных вызовов в хранилище данных ядра?

Спасибо за любую помощь.

ответ

1

Вы можете отфильтровать исходный массив результатов, используя предикат. См. Метод NSArray filterArrayUsingPredicate.

1

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

Моей рекомендацией является получение ссылки на ваш fetchedResultsController в вашем контроллере представления и обновление вашего предиката с помощью составного предиката, соответствующего вашим дополнительным параметрам поиска.

Если вы хотите связать источник данных viewControllers с предикатом предиката, вы не сможете правильно использовать методы делегирования NSFetchedResultsControllers Delegate, которые позволят легко и динамически обновлять виды, такие как представление таблицы и коллекции.

/* assuming you're abstracting your datastore with a singleton */ 
    self.fetchedResultsController = [DataStore sharedStore].fetchedResultsController; 
    self.fetchedResultsController.delegate = self; 
    [self.fetchedResultsController.fetchRequest setPredicate:yourPredicate]; 

Обязательно настройте размер партии запросов на выборку на разумное значение для повышения производительности.

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