У меня есть тысячи строк данных в базовых данных. Выполнение такой большой выборки значительно замедляет работу UX. Поскольку я позволяю пользователю просматривать данные различными способами, перезагрузки являются обычным делом, и перезагрузка FRC может быть болезненной. Соответственно, я добавил FetchLimit в свой Fetch, скажем, 50. 50 отлично подходит для скорости, но тянет только часть строк, поэтому старые данные просто недоступны.
Я хотел бы реализовать бесконечную прокрутку, чтобы свежие строки загружались, когда пользователь попадает в нижнюю часть TableView. Я могу запустить перезагрузку, используя любой из нескольких методов делегата, таких как:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger lastSectionIndex = [tableView numberOfSections] - 1;
NSInteger lastRowIndex = [tableView numberOfRowsInSection:lastSectionIndex] - 1;
if ((indexPath.section == lastSectionIndex) && (indexPath.row == lastRowIndex)) {
// This is the last cell
[self getMore];
}
}
Моя проблема в том, что использовать для получения большего. Следующее работает, но кажется неуклюжим, так как вам нужно перезагрузить все предыдущие ячейки, и становится трудно отследить, где вы находитесь в fetchLimit. Есть ли более эффективный способ выполнения бесконечной прокрутки?
- (void)getMore {
[self.fetchedResultsController.fetchRequest setFetchLimit:newFetchLimit];
self.fetchedResultsController = nil;
NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
[self.tableView reloadData];
}