Я обнаружил утечку памяти с помощью инструментов в одном из моих TableView, точно в строке:
[[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self options:NULL];
Идентификатор из nib ShopListCell был неверным с CellIdentifier.
СейчасУ меня нет утечек памяти, но у моих UITableViewCell есть своя собственная жизнь: -)
Я использую пользовательский UITableViewCell, и я показываю некоторые изображения и обновляю некоторые метки из NSFetchedResultsController.
Когда пользователь щелкает в одной строке, я обновляю модель, поэтому в ячейке всегда отображаются реальные данные, но вместо реальных данных отображается другая ячейка.
Iподозреваю, что это потому, что я повторно использую ячейки, но я делаю все изменения в ячейке, прежде чем возвращать ее, поэтому я ожидаю всегда показывать правильные данные.
Это было идеально до устранения утечки памяти, явсегда использовал новую ячейку, теперь я использую их повторно, но с большим количеством проблем.
[cell setNeedsDisplay];перед возвращением ячейка не имеет никакого эффекта.
Вот некоторый код:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"ShopListCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self options:NULL];
cell = nibLoadCell;
cell.backgroundColor = [UIColor clearColor];
}
// Set up the cell...
Ingredient *ingredient = (Ingredient *)[fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Section %d Row %d ingredient: %@", indexPath.section, indexPath.row,ingredient.name); // just to be sure it fetchs the correct data, and it does
if([ingredient.isInListDone intValue] == 0) {
cell.accessoryType = UITableViewCellAccessoryNone;
[cellStateButton setSelected:NO];
cellImageInList = nil;
}
else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[cellStateButton setSelected:YES];
cellImageInList.image = [UIImage imageNamed:@"underlined2.png"];
}
cellLabelName.text = [ingredient name];
[cell setNeedsDisplay]; // this line has NO effect
return cell;
}
Также я поставил NSLog, и он выбирает правильные данные в правильном разделе и строке ...
спасибо,
р.