Я нашел memoryleak с помощью инструментов в одном из моих TableView, точно на линии:dequeueReusableCellWithIdentifier после разрешения memoryleaks
[[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self options:NULL];
Идентификатор от кончика пера ShopListCell не было правильным с CellIdentifier.
Теперь у меня нет памяти-утечки, но мои UITableViewCells имеют свои собственные полужизни :-)
Я использую пользовательские UITableViewCell, и я покажу некоторые изображения и обновить некоторые этикетки от более NSFetchedResultsController ,
Когда пользователь нажимает одну строку, я обновляю модель, поэтому в ячейке всегда отображаются реальные данные, но вместо отображения реальных данных отображается другая ячейка.
Я подозреваю, что это связано с тем, что я повторно использую ячейки, но перед внесением изменений я делаю все изменения в ячейке, поэтому я ожидаю, что всегда буду показывать правильные данные.
Это было прекрасно, прежде чем исправлять утечку памяти, я использовал всегда новую ячейку, теперь я повторно использую их, но с большим количеством проблем.
The [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 и выбирает правильные данные в правильном разделе и строки ...
спасибо,
р.
Что еще сообщение? Если вы имели в виду другой ответ, почему бы вам не принять его вместо своего? –