@iosparamamaxxx

Как правильно сделать подгрузку новых данных Core Data IOS?

Делаю на IOS приложение, которое общается с сервером(через RestKit) и хранит данные в Core Data.
Хотелось бы организовать предварительную загрузку: в tableview сначала отображаем первые 20 записей, как только приближаемся к концу таблицы (за 40 пикселей или 4 ячейки до конца), подгружаем еще данные.
Пример: приложение Facebook, IOS
Как это правильно сделать для двух вариантов:
- если я изначально загрузил 10000 записей в Core Data и хочу отображать вначале только 30 записей и дальше по запросу по 30. Я использовал этот код, но приложение загружало новые данные с подвисаниями
@interface InfiniteScrollViewController ()

@property (nonatomic) NSMutableArray *tableViewData;
@property (nonatomic) BOOL loadingMoreTableViewData;

@end

@implementation InfiniteScrollViewController

- (void)viewDidLoad {
    self.tableViewData = [[NSMutableArray alloc] init];
    [self addSomeMoreEntriesToTableView];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.tableViewData.count + 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if (indexPath.row < self.tableViewData.count) {
        cell.textLabel.text = [self.tableViewData objectAtIndex:indexPath.row];
    } else {
        cell.textLabel.text = @"Loading more data...";

        // User has scrolled to the bottom of the list of available data so simulate loading some more if we aren't already
        if (!self.loadingMoreTableViewData) {
            self.loadingMoreTableViewData = YES;
            [self performSelector:@selector(addSomeMoreEntriesToTableView) withObject:nil afterDelay:5.0f];
        }
    }

    return cell;
}

- (void)addSomeMoreEntriesToTableView {
    int loopTill = self.tableViewData.count + 20;
    while (self.tableViewData.count < loopTill) {
        [self.tableViewData addObject:[NSString stringWithFormat:@"%i", self.tableViewData.count]];
    };
    self.loadingMoreTableViewData = NO;
    [self.tableView reloadData];
}

@end


- каждый раз подгружать с сервера
  • Вопрос задан
  • 2440 просмотров
Пригласить эксперта
Ответы на вопрос 1
@siben7
Посмотрите что такое NSFetchedResultsController.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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