Проблемы с кэшированием в TDBadgedCell - PullRequest
2 голосов
/ 07 февраля 2010

Этот пост тесно связан с моим предыдущим постом: TDBadgedCell продолжает кэшировать 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 ]

1 голос
/ 07 февраля 2010

ОК, я понял это. Очевидно, я не должен использовать код по умолчанию для инициализации своей ячейки при использовании 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];

Мне интересно, чисто ли это с точки зрения использования памяти и тому подобного, но пока подойдет хотя бы.

0 голосов
/ 24 марта 2013

Я думал, что это было исправлено в коммите 2d255f075fe53ad10afe8eb65666207a8f2c65d0 , который был сделан 22 марта 2013 года. В моем случае это первоначально, казалось, решало проблему большую часть времени, но я все еще иногда видел кэшированные значки , Затем я понял, что вы можете исправить это раз и навсегда, используя две разные ячейки: когда вам нужна ячейка с бейджем, удалите TDBadgedCell из очереди, а когда вам не нужен значок, снимите с очереди обычную UITableViewCell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...