NSFetchedResultController, ограничивающий количество выборок
Если я инициализирую свой NSFetchedResultController с fetchRequest с fetchLimit, равным 20, нужно ли мне вызывать executeFetch еще раз, если мой пользователь прокручивает первые 20 результатов? Или будет выполнять вызов мне автоматически?
1 ответ
Если вы используете fetchLimit
, он не будет обновляться, но если вы хотите получить первые 20 результатов и автоматическое обновление для большего количества, вы можете использовать setBatchSize
в 20
,
Смотрите ниже для деталей:
Счетчик массива fetchedObjects может не соответствовать тому, что вы хотите сделать, поскольку он не обновляет изменения из постоянного хранилища. Из документации NSFetchedResultsController:
Массив результатов включает только экземпляры объекта, указанного в запросе на выборку (fetchRequest), которые соответствуют его предикату. (Если запрос на выборку не имеет предиката, то массив результатов включает в себя все экземпляры объекта, указанного в запросе на выборку.)
Массив результатов отражает состояние управляемых объектов в памяти в контексте управляемого объекта контроллера, а не их состояние в постоянном хранилище. Однако возвращенный массив не обновляется, поскольку управляемые объекты вставляются, изменяются или удаляются.
Если вы хотите получить только 20 объектов, установите предел выборки NSFetchRequest. Если вы хотите сохранить только 20 объектов в памяти, используйте setBatchSize объекта NSFetchRequest.