[NSCFString count]: selector not recognized

Salut,
Je veux afficher le contenu d'un array ds une tableView, ce que j'ai déjà fait 100 fois...
Lorsque que je fais un count sur mon array il me renvoie :
[_calculatedArray count] : 6
ce qui est exact.
En revanche, il bronche dans :
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [_calculatedArray count];
}
Lorsque je lance le programme, j'ai droit à :
*** -[NSCFString count]: selector not recognized [self = 0x30d090]
Mon array est une variable d'instance qui comprends 4 dico.
Une idée pour me mettre sur la voie ? :)beta:
Je veux afficher le contenu d'un array ds une tableView, ce que j'ai déjà fait 100 fois...
Lorsque que je fais un count sur mon array il me renvoie :
[_calculatedArray count] : 6
ce qui est exact.
En revanche, il bronche dans :
- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [_calculatedArray count];
}
Lorsque je lance le programme, j'ai droit à :
*** -[NSCFString count]: selector not recognized [self = 0x30d090]
Mon array est une variable d'instance qui comprends 4 dico.
Une idée pour me mettre sur la voie ? :)beta:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Oui, mais ça ne va pas être agréable.
Tu as tous les symptômes d'une mémoire corrompue : la méthode count n'est pas envoyée au bon objet. C'est dû à une erreur de programmation quelque part ailleurs. ça peut arriver si tu as fait un release de trop, ou plus vicelard, si tu accèdes à une donnée qui a été autoreleasée mais dont tu as gardé l'adresse.
Désolé, faut chercher.
+
Chacha
(qui a déjà eu mille fois un tel problème)
À partir du moment où la mémoire est corrompue, le comportement est erratique; y'a des trucs qui marchent, et d'autres pas. Mais on ne peut se fier à rien.
J'ajoute que ce n'est pas forcément le tableau qui a été trop releasé, ce peut être une tout autre variable.
Les dico sont autoreleasés, mais normalement ils ne sont plus adressés ?
Un exemple de code foireux :
Le problème, c'est qu'avec les variables autoreleasées, on voit moins bien où on a fait des erreurs...
Exemple plus subtil d'erreur :
+
Chacha
Tu le fais dans -numberOfRowsInTableView: ton NSLog?
ça doit pas être bien loin :
et dans la méthode "calculateArray" qui retourne un array :
Voilà . Où est la couille du potage ?
[EDIT]
Et ça marche. Mais je ne trouve pas cela glorieux... y'a pas mieux ?
Ceci aussi:
Mais comme tu as visiblement des problèmes avec la gestion de la mémoire, il vaut mieux éviter de créer (et "retainer") des instances de tous les côtés.
Ta première solution me semble la plus élégante, puisque je viens de lire que setArray ne fait pas d'autorelease, comme arrayWithArray, et qu'elle absorbe le contenu du tableau en argument,, en faisant un retain et en releasant les objets de l'ancien tableau. C'est ça ?
Merci aussi à chacha pour ses conseils.
+arrayWithArray: est une méthode de classe de NSArray, qui crée une nouvelle instance qui a pour contenu celui du tableau placé en argument
-setArray: est une méthode d'instance de NSMutableArray (ce qui suppose que l'instance est déjà créée), qui vide un mutableArray, et remplace son contenu par celui du tableau placé en argument.
ça me semble plus clair maintenant.