缓存TDBadgedCell的问题

时间:2010-02-06 22:57:07

标签: uitableview

这篇文章与我之前的帖子密切相关: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中缓存图形时遇到很多问题。任何最佳实践或其他有用信息都是最受欢迎的。

2 个答案:

答案 0 :(得分:1)

好吧,我想出了这个。显然,在使用TDBadgedCell时,我不应该使用默认代码来初始化我的单元格。以下代码:

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出列。