我在我的一个TableView中找到了一个使用乐器的记忆漏洞,正是在这一行:
[[NSBundle mainBundle] loadNibNamed:@"ShopListCell" owner:self options:NULL];
使用CellIdentifier,nib ShopListCell中的标识符不正确。
现在,我没有内存泄漏,但我的UITableViewCells有自己的生命: - )
我正在使用自定义UITableViewCell,我会显示一些图像并更新NSFetchedResultsController中的一些标签。
当用户点击一行时,我会更新模型,因此单元格始终显示真实数据,但是,它显示的不是真实数据,而是显示其他一些单元格。
我怀疑这是因为我正在重复使用单元格,但是在返回之前我对单元格进行了所有修改,因此我希望始终显示正确的数据。
在修复内存泄漏之前这是完美的,我总是使用一个新的单元格,现在我正在重用它们但是有很多问题。
[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,它在正确的部分和行中获取正确的数据......
感谢,
河
答案 0 :(得分:1)
您正在使用
创建一个单元格cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
然后使用
将单元格变量分配给其他内容cell = nibLoadCell;
第一行基本上没有效果。我猜想从笔尖加载的单元格仍然没有正确设置其cellIdentifier。看这里: Loading a Reusable UITableViewCell from a Nib
答案 1 :(得分:0)
阅读完另一篇文章后,最后我用自定义单元格设置了一个新类,现在按预期工作了,没有内存泄漏!
感谢,
河