2010-02-06 2 views
2

Ce poste est étroitement lié à mon précédent post: TDBadgedCell keeps caching the BadgeNumberproblèmes de caching avec TDBadgedCell

Le "badge" de la mise en cache TDBadgedCell conserve les numéros. Un exemple très simple est montré ici:

- (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; 
} 

Quelqu'un a la moindre idée pourquoi cela se produit? Le textLabel et detailTextLabel ne mettent pas en cache les données. Toute information additionnelle serait la bienvenue, car il semble y avoir beaucoup de problèmes avec la mise en cache des graphiques dans UITableViewCells. Toutes les meilleures pratiques ou d'autres informations utiles seraient les bienvenues.

Répondre

1

OK, j'ai compris celui-ci. Apparemment, je ne devrais pas utiliser le code par défaut pour initialiser ma cellule lors de l'utilisation de TDBadgedCell. Le code suivant:

TDBadgedCell *cell = (TDBadgedCell *)[_tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
} 

doit être changé en ceci:

TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

Je me demande si cela est propre en termes d'utilisation de la mémoire et de ce fait, mais il fera pour l'instant au moins.

0

Je pensais que cela a été corrigé dans le commit 2d255f075fe53ad10afe8eb65666207a8f2c65d0, qui a été faite le 22 mars 2013. Dans mon cas, cela semblait initialement résoudre le problème la plupart du temps, mais je voyais encore parfois des badges en cache. Puis j'ai réalisé que vous pouvez résoudre ceci une fois pour toutes en utilisant deux cellules différentes: quand vous avez besoin d'une cellule badged, dequeue un TDBadgedCell, et quand vous n'avez pas besoin d'un badge, dequeue un UITableViewCell ordinaire.