Erreur lors de l'accès à  un NSArray

neuro6neuro6 Membre
16:59 modifié dans API AppKit #1
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 :D

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)&nbsp; 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]&nbsp; 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--)

Réponses

  • BruBru Membre
    16:59 modifié #2
    Et une victime du méchant autoreleasepool de plus. Une !

    Ajoute la ligne :
    [monTableau retain]
    


    juste après la ligne :
    monTableau = [[ABAddressBook sharedAddressBook]&nbsp; people] ;
    


    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.

    .


  • neuro6neuro6 Membre
    16:59 modifié #3
    Bon bin c'était une question stupide alors :)
    Merci beaucoup en tout cas ! Je vais me trouver de la nouvelle doc.
  • AliGatorAliGator Membre, Modérateur
    février 2008 modifié #4
    dans 1201904233:

    Bon bin c'était une question stupide alors :)
    Merci beaucoup en tout cas ! Je vais me trouver de la nouvelle doc.
    Ah non je suis pas d'accord. Y'a pas de question stupide en soi.
    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)  :p :p :p :p :p :p
  • ClicCoolClicCool Membre
    16:59 modifié #5
    dans 1201912678:
    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.

    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)

    dans 1201912678:
    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)  :p :p :p :p :p :p

    T'as raison, y'a des choses qui se perdent.
    :p Bienvenu à  toi neuro6  :p
Connectez-vous ou Inscrivez-vous pour répondre.