Modifier un NSMutableArray d'objets

RocouRocou Membre
04:01 modifié dans API AppKit #1
Bonjour,

J'ai un NSMutableArray qui contient des objets NSDictionnay:

&nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; Client = Toto;<br />&nbsp; &nbsp; &nbsp; &nbsp; Adresse = &quot;Rue des pinsons&quot;;<br />&nbsp; &nbsp; },<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; Client = &quot;Malabar gonfle&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; Adresse = &quot;Rue des mesanges&quot;;<br />&nbsp; &nbsp; }


Comment faire pour changer "Toto" en "Titi"?

Réponses

  • AliGatorAliGator Membre, Modérateur
    04:01 modifié #2
    Le fait que ton array soit mutable veux dire que tu peux ajouter ou supprimer des objets au NS(Mutable)Array. Mais par contre ton NSMutableArray contient des NSDictionary, qui s'ils ne sont pas eux-même "mutables", ne pourront être modifiés.

    Donc 2 solutions :
    1) soit tu récupères l'objet de ton NSMutableArray (objet qui est donc un NSDictionary), en fait une "mutableCopy", pour le modifier, puis remplaces ton objet (ton NSDictionary) qui est dans ton NSMutableArray par la mutableCopy modifiée (et tu releases enfin la mutableCopy créée pour l'occasion une fois rajoutée)... En gros le principe c'est de sortir ton objet (NSDictionary) de ton NSMutableArray, ça tu peux puisque ton array est mutable donc tu peux faire "removeObjectAtIndex:" dessus... puis créer un autre NSDictionary identique à  celui que tu viens d'enlever à  part pour la clé "Client" que tu fais pointer sur Tata et plus Toto... et tu réinsères le nouvel objet dans ton NSMutableArray...
    Tout ça parce que ton NSDictionary n'est pas mutable, donc que tu ne peux pas le modifier, donc que tu es obligé de créer un nouveau NSDictionary identique sauf pour la ou les clés que tu veux modifier... galère un peu quand même !

    2) Ou alors, 100x plus simple, tu remplaces tes NSDictionary par des NSMutableDictionary. Quand tu récupères l'objetAtIndex i de ton NSMutableArray, ça te retourne non plus un NSDictionary mais un NSMutableDictionary... que tu peux donc modifier avec "setValue: forKey:", et basta, c'est tout ! Ca modifie le NSMutableDictionary partout où il a été référencé... y compris dans ton NSMutableArray :)
  • RocouRocou Membre
    04:01 modifié #3
    dans 1239294787:

    Le fait que ton array soit mutable veux dire que tu peux ajouter ou supprimer des objets au NS(Mutable)Array. Mais par contre ton NSMutableArray contient des NSDictionary, qui s'ils ne sont pas eux-même "mutables", ne pourront être modifiés.

    Donc 2 solutions :
    1) soit tu récupères l'objet de ton NSMutableArray (objet qui est donc un NSDictionary), en fait une "mutableCopy", pour le modifier, puis remplaces ton objet (ton NSDictionary) qui est dans ton NSMutableArray par la mutableCopy modifiée (et tu releases enfin la mutableCopy créée pour l'occasion une fois rajoutée)... En gros le principe c'est de sortir ton objet (NSDictionary) de ton NSMutableArray, ça tu peux puisque ton array est mutable donc tu peux faire "removeObjectAtIndex:" dessus... puis créer un autre NSDictionary identique à  celui que tu viens d'enlever à  part pour la clé "Client" que tu fais pointer sur Tata et plus Toto... et tu réinsères le nouvel objet dans ton NSMutableArray...
    Tout ça parce que ton NSDictionary n'est pas mutable, donc que tu ne peux pas le modifier, donc que tu es obligé de créer un nouveau NSDictionary identique sauf pour la ou les clés que tu veux modifier... galère un peu quand même !

    2) Ou alors, 100x plus simple, tu remplaces tes NSDictionary par des NSMutableDictionary. Quand tu récupères l'objetAtIndex i de ton NSMutableArray, ça te retourne non plus un NSDictionary mais un NSMutableDictionary... que tu peux donc modifier avec "setValue: forKey:", et basta, c'est tout ! Ca modifie le NSMutableDictionary partout où il a été référencé... y compris dans ton NSMutableArray :)

    Dans mon cas, je ne peux pas remplacer les NSDictionary par des NSMutableDictionary puisqu'il s'agit d'une déclaration issu d'un frameWork (PGSQLKit pour ne pas le nommer).
    J'ai opté pour ta première idée. C'est vrai que c'est un peu lourdingue mais ça fonctionne très bien!
    Le but était en fait de réinterprèter des caractères accentués.

    Encore merci!
Connectez-vous ou Inscrivez-vous pour répondre.