0
votes

Quand j'essaye d'ajouter NSDictionary dans nsmutableArray, je ne peux pas remplacer le dernier objet ajouté

Je dois ajouter nsdicdiction code> dans nsmutableArray code>.

Tout d'abord j'ai créé un nsmutabledictionnerdictionner (code> avec une valeur de clé d'une autre structure comme ceci: p> xxx pré>

sélectionnéfiltersbyuser est un dictionnaire comme ceci: p> xxx pré>

et pour chaque clé: valeur dans ce dictionnaire, je crée un nouveau nsmutableddiction comme ceci: p> xxx pré>

et ce nouveau Nsmutabledictiondicastural Code> Ajouté dans NsmutableArraRay Code> Comme ceci: P>

{
       key: category_id,
       value: XXX
   },
   {
    key: sort,
    value: last_updated_asc
   },
   {
    key: status,
    value: rejected_by_seller
   }


5 commentaires

Essayez de [NSDictionary Alloc] init] dans la boucle FOR, puis ajoutez des données.


Dans la boucle? Mais j'y introche de la boucle. J'ai créé un nouveau NSMutabledictionner pour chaque élément, puis ajouté à une autre structure? @Niravkotecha


Oui dans la boucle.


Lorsque vous êtes hors de la boucle, chaque fois qu'il ira à la boucle intérieure et que la touche est la même, elle va écraser avec une nouvelle valeur. Si vous introduisez dans la boucle, cela créera un nouveau.


Merci. Ce n'était mes problèmes. J'ai besoin de créer un nsmutabledictionner en boucle. @Niravkotecha


3 Réponses :


1
votes

Essayez de [Nsmutableddictionnercoc] init] init] dans la boucle pour puis ajoutez des données.

Parce que lorsque vous init hors de la boucle, chaque fois qu'il va Allez à la boucle intérieure et la touche est la même chose, il va écraser avec une nouvelle valeur. Si vous init dans la boucle, il en créera un nouveau. xxx


0 commentaires

0
votes

Ajout d'un dictionnaire à la matrice ne pas copie le dictionnaire. Il stocke une référence à l'objet (dictionnaire) à la matrice, une référence au dictionnaire identique est ajoutée à chaque fois.

Écraser le contenu du dictionnaire modifie le dictionnaire identique, qui est stocké plusieurs fois dans le tableau.

Vous devez créer un nouveau dictionnaire à chaque fois. Il n'y a aucune raison de créer un mutable.


0 commentaires

0
votes

Comme les commentaires ont signalé que votre problème est dû à la sémantique de collections de l'objectif-C, c'est-à-dire qu'ils contiennent des références aux objets existants et pas les copies. Donc, si vous ajoutez le même nsmutabledictionner (code> plusieurs fois à plusieurs fois à un nsmutableArray Comme votre code vous finissez avec chaque élément du tableau étant une référence à la même dictionnaire. La solution simple déjà suggérée consiste à affecter le dictionnaire à l'intérieur de votre boucle: xxx

Cependant, vous pouvez le rendre plus simple et éviter tout le problème. Vous êtes déjà indexation sélectionnéfiltersbyuser , vous pouvez également indexer filters_data de la même manière qui vous donne: xxx

mais ça reste vous laisse avec l'allocation, que vous pouvez supprimer à l'aide d'un littéral dictionnaire : xxx

maintenant là que l'allocation est traitée automatiquement par le compilateur et vous Obtenez un NSDictionary . L'option finale consiste à supprimer filtres_date tout à fait: xxx

Vous pouvez constater que l'utilisation de dictionnaire (et de tableau) littéraux vous aide à éviter les erreurs d'affectation et à la création d'une mutable. structures quand ils ne sont pas nécessaires. Htth


0 commentaires