NSFetchedResultsController игнорирует fetchLimit после executeFetch - PullRequest
4 голосов
/ 26 января 2012

У меня есть приложение с вкладками, которое имеет 2 вкладки с 2 UITableView.
У меня также есть 2 объекта типа NSFetchedResultsController, но оба они находятся на одной и той же сущности с разным порядком и разным пределом выборки.
Когда я загружаю больше объектов из Интернета и вставляю их в базу данных, мои объекты типа NSFetchedResultsController будут игнорировать fetchLimit. Для первого я установил fetchLimit равным 10, а для второго я установил fetchLimit равным 50. Изначально у меня есть 10 объектов в базе данных. Все отлично. После того, как я загружаю более 40 объектов, первый также загружает более 40 объектов, но его значение fetchLimit равно 10.

Что с этим не так?

Ответы [ 2 ]

2 голосов
/ 27 января 2012

NSFetchedResultsController игнорирует fetchLimit в случае изменения контекста.

Я думаю, что это не так просто, чтобы корректно обновить таблицу с помощью momc наблюдение, когда вы ограничены fetchlimit.

РЕШЕНИЕ № 1

Таким образом, в случае, если произошло большое обновление, вы должны повторно получить данные.

Так что вы должны сделать что-то подобное в делегате FRC:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
   [self.tableView endUpdates];
   if (bigChangesPeformed) {
     NSError * error;

     // Re-fetching to get correct fetch limit
     [self.fetchedResultsController performFetch:&error];
     if (error) {
        // bla-bla-bla
     }
     [self.tableView reloadData];

   }
}
0 голосов
/ 29 марта 2014

Предел выборки NSFetchRequest - это предел, используемый при выполнении выборок из хранилища данных. Он не предназначен для ограничения размера полученного массива результатов. Если вы хотите ограничить общее количество ячеек, отображаемых в вашем табличном представлении, вам, вероятно, следует использовать UITableView tableView:numberRowsForSection:, чтобы ограничить его.

Если вы действительно хотите установить ограничение в 10 отображаемых элементов (например, отображать список из 10 лучших), вероятно, нет никакой реальной причины использовать более 1 раздела. Если вы ограничите число разделов в вашем tableView до 1, используя numberOfSectionsInTableView:, а количество строк в этом разделе - В НАИБОЛЕЕ 10 с tableView:numberRowsForSection:, ваша таблица всегда будет отображать до 10 записей независимо от того, сколько записей добавлено хранилище данных.

Вы можете использовать дескрипторы сортировки, чтобы упорядочить объекты, управляемые вашим экземпляром NSFetchedResultsController, что, как мне кажется, полезно для отображения списка Top 10.

...