这篇文章与我之前的帖子密切相关:TDBadgedCell keeps caching the BadgeNumber
来自TDBadgedCell的“徽章”不断缓存数字。这里显示了一个非常简单的例子:
- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
TDBadgedCell *cell = (TDBadgedCell *)[_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
[cell setBadgeColor:[UIColor blackColor]];
[cell setBadgeNumber:[indexPath row]];
[[cell textLabel] setText:[NSString stringWithFormat:%@"%d", [indexPath row]]];
return cell;
}
任何人都知道为什么会这样? textLabel和detailTextLabel不会缓存数据。任何附加信息也会受到欢迎,因为我似乎在UITableViewCells中缓存图形时遇到很多问题。任何最佳实践或其他有用信息都是最受欢迎的。
答案 0 :(得分:1)
TDBadgedCell *cell = (TDBadgedCell *)[_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
需要更改为:
TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
我想知道这在内存使用方面是否干净等等,但现在至少可以做到。
答案 1 :(得分:0)
我认为这是在2013年3月22日制作的提交2d255f075fe53ad10afe8eb65666207a8f2c65d0中修复的。在我的情况下,这最初似乎解决了问题的大部分时间,但我仍然偶尔会看到缓存的徽章。然后我意识到你可以通过使用两个不同的单元来一劳永逸地解决这个问题:当你需要一个标记的单元格,将一个TDBadgedCell出列,当你不需要一个徽章时,将一个普通的UITableViewCell出列。