Как решить медленную прокрутку в UITableView - PullRequest
8 голосов
/ 30 марта 2009

Я впервые тестирую на реальном устройстве, и после устранения некоторых очевидных проблем с производительностью застрял на плавной прокрутке.

Вот что я делаю:

  • Данные в sqlite
  • У меня есть небольшой массив с заголовком
  • У меня есть в каждом массиве заголовков список идентификаторов из Db

, например

Заголовок A Ids = 1,2; Заголовок B Ids = 3,4

  • Я лениво загружаю ячейку и объект, чтобы получить данные
  • Едва загружается 10 единиц одновременно
  • Загрузка идет быстро, проблема только в прокрутке

Это код загрузки ячейки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"ProductCell";

    ProductCell *cell = (ProductCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ProductCell" owner:self options:nil];

        cell = [nib objectAtIndex:0];
    }

    // Set up the cell...
    Product *p = [self locateRecord:indexPath]; 

    cell.nameLabel.text = [p.name capitalizedString];
    cell.codeLabel.text = p.ref;

    if ([self.selectedProducts objectForKey:[NSNumber numberWithInt:p.Id]]) {
        OrderDetail *d = [self findDetail:p];

        cell.qty.text = [NSString stringWithFormat:@"%ld",[d.qty integerValue]];
    }

    return cell;
}

- (id) locateRecord:(NSIndexPath *)indexPath {
    NSNumber *theId;
    NSUInteger pos = [indexPath row];

    id o;

    if (self.results) { 
        theId = [self.results objectAtIndex:pos];
    } else {
        NSString *key = [[self.index objectAtIndex:[indexPath section]] objectAtIndex:0];
        NSArray *data = [self.cache objectForKey:key];

        theId =  [data objectAtIndex:pos];
    }   

    Db *db= [Db currentDb];

    o = [db loadById:[self returnItemClass] theId:[theId intValue]];

    return o;
}

1 Ответ

5 голосов
/ 30 марта 2009
  1. Предварительная загрузка данных
  2. Сделай свой рисунок
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...