2010-06-15 10 views
3

Je suis confronté à un problème concernant un module laissez-moi effacer le flux pour le même.EXC_BAD_ACCESS en raison de PostNotification

J'ai un UITableviewCell personnalisé.

Quand je reçois une nouvelle information que je posterai une notification

[[NSNotificationCenter defaultCenter] postNotificationName:KGotSomething object:nil userInfo:message]; 

Au vu où je suis maintenant la table j'entreprends une cellule sur mesure

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell= [[CustomCell alloc] initWithFrame: reuseIdentifier:identifier document:doc]; 
    return cell; 
} 

maintenant customcell.mm

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 
{ 
[[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(GotSomething:) 
         name:KGotSomething 
         object:nil]; 
} 

et en dealloc

- (void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
        name:KGotSomething 
         object:nil]; 
} 

Maintenant, mon application tombe en panne à cause de cette notification et dealloc n'est jamais appelé.

Pouvez-vous les gars me aider, comment obtenir ce travail ou tout ce que je fais mal ici ...

Merci,

Sagar

+0

Pouvez-vous vérifier le GotSomething: de la customcell, est-ce ici? La signature de la méthode est-elle correcte? – vodkhang

Répondre

6

Vous initWithFrame:reuseIdentifier: et dealloc méthodes sont incomplètes. Est-ce délibéré?

initWithFrame:reuseIdentifier: devrait contenir un appel à super:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
       selector:@selector(GotSomething:) 
         name:KGotSomething 
         object:nil]; 
    } 
    return self; 
} 

et dealloc aussi:

- (void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
        name:KGotSomething 
         object:nil]; 
    [super dealloc]; 
} 

Mise à jour

La cellule n'est pas auto-libération après sa création. Donc la cellule fuit et ne se désaffecte jamais. Le code devrait être:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell= [[CustomCell alloc] initWithFrame: reuseIdentifier:identifier document:doc]; 
    return [cell autorelease]; 
} 
+0

Bonjour Laurent Merci pour la réponse .. Ces deux init et dealloc sont avec le même prototype que vous avez dit .. Problème est dealloc pour customcell jamais appelé .. le nombre de retenue pour cette cellule reste 3. et comme dealloc pas appelé mon la notification n'est pas supprimée correctement. Bien que nous libérons la table qui utilise la cellule personnalisée, je ne suis pas capable de comprendre comment libérer ces cellules personnalisées. –

+0

Dans la méthode "tableView: cellForRowAtIndexPath:", vous créez une cellule et la renvoyez sans la libérer automatiquement. C'est peut-être pourquoi la cellule ne se désaffecte jamais. –

+0

J'ai essayé avec cette approche .. mais ne fonctionnait pas .... –