Здравствуйте!
— Не хотите ли войти
1
ответ

Дублируются строчки в tableView

У меня есть NSDictionary dataItems с 30 элементами. На их основе заполняется TableView. После заполнения 9 записей (как я понимаю столько умещается на экране сразу) остальные записи начинают заполняться не из массива, а из этих 9. Вместо 1 2 3 4 5 6 7 8 9 10 11 12 и т.д. У меня получается так 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 и т.д. Вероятно что-то где-то кэшируется или проблемы со скроллингом. Возможно я что-то делаю не так. Помогите пожалуйста найти природу данной проблемы.

Мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        CarsSearchListCell *cell = (CarsSearchListCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];
        if (!cell)
        {
            NSLog(@"LOG %i",indexPath.row);
            NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
            cell = [topLevelItems objectAtIndex:0];
            cell.titleLabel.text = [NSString stringWithFormat:@"%@ %@ %@",
                                    [[dataItems objectAtIndex:indexPath.row] objectForKey:@"brand"],
                                    [[dataItems objectAtIndex:indexPath.row] objectForKey:@"model"],
                                    [[dataItems objectAtIndex:indexPath.row] objectForKey:@"modification"]];
            cell.descriptionLabel.text = [NSString stringWithFormat:@"%@ руб, %@, %@, %@ г.",
                                          [[dataItems objectAtIndex:indexPath.row] objectForKey:@"price"],
                                          [[dataItems objectAtIndex:indexPath.row] objectForKey:@"gear"],
                                          [[dataItems objectAtIndex:indexPath.row] objectForKey:@"volume"],
                                          [[dataItems objectAtIndex:indexPath.row] objectForKey:@"year"]];
           
            NSURL *imageurl = [NSURL URLWithString: 
                          [[dataItems objectAtIndex:indexPath.row] objectForKey:@"image"]];
            UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:imageurl]];
            cell.imageView.image = image;
            cell.accessoryType =  UITableViewCellAccessoryDisclosureIndicator;

        }
        return cell;
 
}

При этом NSLog(@«LOG %i»,indexPath.row) выдает LOG 1 LOG 2 LOG 3 LOG 4 LOG 5 LOG 6 LOG 7 LOG 8. А если проскролить чуть вниз появляется еще и LOG 9. Остальные 21 ячейки присутствуют, но программа почему-то их не рисует, а берет уже готовые.

Заранее спасибо.

2 февраля 2012

Ответы

Все верно. Вот это условие if (!cell) выдает NO после первых девяти (или около того) ячеек.

2 февраля 2012

А как быть, если мне не нужно, чтобы у меня перестраивались уже построенные ячейки? Программа очень тормозить при скорллинге будет в таком случае. От чего зависит сколько он строит ячеек, от того сколько умещается на экран, от размера таблицы или это фиксированное число?

@MrKot1

Ячейки и не будут перестраиваться. Сейчас заполняются только первые 9, потом они используются повторно. Они и должны использоваться повторно, но заполняться каждый раз правильными данными. Все кроме создания ячейки нужно вынести из этого if'а.

alex

Огромное спасибо! То что нужно. Даже стыдно, что сам не догадался после Вашей первой подсказки.

@MrKot1
Зарегистрируйтесь или войдите, чтобы добавить свой комментарий или ответ на вопрос.
© 2009-2012, ООО «Инру»
Вход
Имя пользователя:
Пароль:
Или…
Twi
Отмена
Войти
Восстановить забытый пароль…