В приложении нумерация страниц в UITableView - PullRequest
0 голосов
/ 25 апреля 2018

Я настроил нумерацию страниц с помощью кодирования со стороны приложения, поэтому я просто получаю все данные из API только один раз, а затем настроил нумерацию страниц, как показано ниже

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(tableView == self.tblForList)
    {
        if (indexPath.row == arrForList.count - 1 && arrForList.count < arrForMainList.count)
        {
            offset += limit;
            page++;
            [self getMore25DataFromMainAry];
        }
    }
}

Здесь проблема заключается в том, что если пользователь прокручивает более одного раза так быстро, но UITableView не перезагружается успешно, метод вызывается более одного раза, следовательно, мое смещение увеличивается до значения, превышающего значение MainArray Count, и мое приложение падает.

Поэтому, пожалуйста, поделитесь своим предложением, чтобы избежать сбоев. Здесь я применил 25 пределов для разбивки на страницы, поэтому каждый раз после добавления 25 элементов в массив массива getMore25Data следует вызывать до тех пор, пока смещение не станет меньше, чем arrrMainList.

1 Ответ

0 голосов
/ 25 апреля 2018

По моему мнению, вы должны добавить свойство BOOL, чтобы getMore25DataFromMainAry нельзя было вызывать во время его работы.

@interface YourClass ()

@property(nonatomic, assign) BOOL loading;

@end

@implementation YourClass

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
  if(tableView == self.tblForList) {
    if (indexPath.row == arrForList.count - 1 && arrForList.count < arrForMainList.count) {
      [self getMore25DataFromMainAry];
    }
  }
}

- (void)getMore25DataFromMainAry {
  if (self.loading) {
    // Don't do anything until loading more completely
    return;
  }

  // Start loading more
  self.loading = YES;

  offset += limit;
  page++;

  // Do whatever you want to load more data.

  // After receiving new data, set |self.loading| to NO
  self.loading = NO;
}

@end
...