problème de pointeur avec NSTextView [résolu]

wiskywisky Membre
août 2005 modifié dans API AppKit #1
j'ai une fenêtre avec un NSTextView. Cette dernière reçois du texte lors de l'édition d'un élément d'un array. Après validation des modif, le texte est récupérer et stocké dans l'array. Tout va bien pour la première édition. Lorsque j'édite un autre élément, ce dernier prend la valeur de l'élément précédemment éditer et lorsque j'ajoute du texte à  l'un, l'autre là  aussi. :-\\

Je ne sais pas si vous me suivez mais j'ai l'impression d'avoir un problème de pointeur.

<br />//affectation du texte:<br />		[Edit_Comment setString:[dico valueForKey:@&quot;Commentaire&quot;]];<br /><br />//recuperation du texte:<br />		[dico setValue:[Edit_Comment string] forKey:@&quot;Commentaire&quot;];<br /><br />//dico est un NSDictionary (local à  la fonction de sauvegarde des valeurs) qui sera ajouter à  l&#39;array.<br />


Je croit que j'ai merdé quelque part mais je sais pas où :'(

Réponses

  • AliGatorAliGator Membre, Modérateur
    août 2005 modifié #2
    Ben moi je dirais que dans ton dictionary, tu ne fais que rajouter le pointeur vers [Edit_Comment string], et pas la chaà®ne elle même. Imagine un peu si à  la place de [Edit_Comment string] tu avais une variable NSString*... tu ne ferais que rajouter ton pointeur à  ton dico, et si tu modifies ta NSString ensuite ça la modifie dans le dico (ok le dico fait un retain, mais il fait pas une copie pour autant, ça reste un pointeur)... et pour solutionner le problème il faudrait que tu fasses un release sur ta NSString* puis que tu en crées une nouvelle (alloc/init).

    Là  comme c'est pas une variable et que tu peux pas faire de release et de alloc/init sur [Edit_Comment string], faut plutôt en faire une copie.

    Je suis pô sur de mon code, mais ça serait dans ce genre là  je pense :
    NSString* comment = [[Edit_Comment string] copy]; // tu crées une copie<br />[dico [dico setValue:comment forKey:@&quot;Commentaire&quot;]]; // c&#39;est la copie que tu ajoutes<br />// comme ça si l&#39;original est modifié ça fera pas bouger la valeur dans le dico<br />[comment release]; // puisqu&#39;elle est mise dans le dico (qui lui fait un retain) tu la relâches ici
    
  • wiskywisky Membre
    15:15 modifié #3
    ça marche nickel :kicking:

    Merci maitre ali  o:)


    :P
Connectez-vous ou Inscrivez-vous pour répondre.