Erreur lors de l'accès à un NSArray
neuro6
Membre
Bonsoir à tous,
Soyez indulgent, je suis totalement débutant en objective-c. j'espère que ma question n'est pas trop bête d'ailleurs, mais vu que cela fait 2 jours que je suis dessus, je viens demander de l'aide
Alors mon soucis : j'ai le DataSource de mon NSTableView qui possède un attribut de type NSArray (le DataSource est d'ailleurs aussi le controler de la frame...). Ma classe implémente donc les fonctions suivantes :
La première ne fait que renvoyer la taille de mon NSArray. Ce dernier ne vaut pas nil, et il possède des éléments (qui sont en fait ABPerson*, récupérés via un
Dans la 2nde fonction, le moindre accès à monTableau fait planter l'application (le debuger se lance). Rien que l'affichage de la taille du tableau plante. Pourtant, la frame (figée) affiche les bonnes informations.
Je bloque là -dessus depuis quelques temps, donc si quelqu'un a la moindre idée pour me sortir de là ... merci d'avance ! 8--)
Soyez indulgent, je suis totalement débutant en objective-c. j'espère que ma question n'est pas trop bête d'ailleurs, mais vu que cela fait 2 jours que je suis dessus, je viens demander de l'aide
Alors mon soucis : j'ai le DataSource de mon NSTableView qui possède un attribut de type NSArray (le DataSource est d'ailleurs aussi le controler de la frame...). Ma classe implémente donc les fonctions suivantes :
- (int) numberOfRowsInTableView : (NSTableView *) aTable<br />- (id) tableView : (NSTableView *) aTable objectValueForTableColumn : (NSTableColumn *) aCol row : (int) aRow
La première ne fait que renvoyer la taille de mon NSArray. Ce dernier ne vaut pas nil, et il possède des éléments (qui sont en fait ABPerson*, récupérés via un
monTableau = [[ABAddressBook sharedAddressBook] people] ;
) J'ai vérifié tout cela en affichant la taille du tableau.Dans la 2nde fonction, le moindre accès à monTableau fait planter l'application (le debuger se lance). Rien que l'affichage de la taille du tableau plante. Pourtant, la frame (figée) affiche les bonnes informations.
Je bloque là -dessus depuis quelques temps, donc si quelqu'un a la moindre idée pour me sortir de là ... merci d'avance ! 8--)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ajoute la ligne :
juste après la ligne :
Puisque tu débutes en Obj-C, je te conseille fortement d'apprendre le mécanisme de gestion de la mémoire.
N'hésite pas à étudier les méthodes retain, release et autorelease, ainsi que le concept de classe NSAutoreleasePool.
Bienvenue sur OC.
.
Merci beaucoup en tout cas ! Je vais me trouver de la nouvelle doc.
Des questions mal posées, ça ça existe à la limite... et ce n'était pas ton cas (je te rassure, c'est juste que c'est arrivé récemment sur le forum ), au contraire puisque pour le coup, pour un débutant en Cocoa et nouveau sur les forums, tu as le mérite :
- d'avoir cherché avant de poser ta question, et de t'être documenté
- d'avoir correctement formulé ta question et expliqué ce que tu avais fait (avec les termes adéquats en plus),
- et d'avoir cité ton code pour qu'on puisse répondre à ta question
Et ça tout le monde ne le fait pas donc c'est aussi bien de le signaler quand c'est fait, c'est appréciable
Allez, puisque j'aime bien pinailler, il manquait juste à la limite la citation du message d'erreur que tu obtenais pour parfaire le tout. Mais bon notre expert en chef a trouvé et t'a indiqué la solution quand même, donc ça ira pour cette fois.
Sinon c'est vrai que la gestion de la mémoire en Cocoa est une des choses fondamentales qu'il faut apprendre d'office. Au début c'est un peu déroutant, mais quand on a compris le principe, ça va tout seul ensuite, ça en devient un automatisme.
Ah, si, il manquait quelquechose d'autre aussi dans ton post. Comme tu es nouveau.... T'aurais quand même pu payer la tournée générale, nan mais ! (ça manque un peu ces derniers temps d'ailleurs je trouve, non ? ;D)Â
C'est vrai qu'une fois assimilée la gestion de la mémoire devient un automatisme.
A tel point que, lorsqu'on active le Garbage Collector pour un nouveau projet, on laisse parfois traà®ner dans notre code des release et auto-releases devenus inutiles dans ce contexte. (pour une solution "dite de facilité" c'est pas si facile d'assimiler les implications sur notre façon de coder avec le GC du reste)
T'as raison, y'a des choses qui se perdent.
Bienvenu à toi neuro6