Дублируются строчки в 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 ячейки присутствуют, но программа почему-то их не рисует, а берет уже готовые.
Заранее спасибо.
Ответы
А как быть, если мне не нужно, чтобы у меня перестраивались уже построенные ячейки? Программа очень тормозить при скорллинге будет в таком случае. От чего зависит сколько он строит ячеек, от того сколько умещается на экран, от размера таблицы или это фиксированное число?
Ячейки и не будут перестраиваться. Сейчас заполняются только первые 9, потом они используются повторно. Они и должны использоваться повторно, но заполняться каждый раз правильными данными. Все кроме создания ячейки нужно вынести из этого if'а.
Огромное спасибо! То что нужно. Даже стыдно, что сам не догадался после Вашей первой подсказки.