2010-07-09 6 views
0

J'écris une application dans XCode 3.2.3 pour iOS 4. Dans mon code, je crée un NSArray de NSDictionaries, chacun contenant deux paires clé/valeur, une chaîne et un NSArray de NSDictionaries (genre de confusion, je sais). Juste pour vous donner un visuel, voici la structure:L'ajout de NSArray à NSDictionary provoque des problèmes

<NSArray> 
    <NSDictionary> 
     <NSString/> 
     <NSArray> 
      <NSDictionary/> 
      <NSDictionary/> 
      ... 
     </NSArray> 
    </NSDictionary> 
    ... 
</NSArray> 

Ce qui est étrange est que quand j'ajoute une nouvelle NSDictionary au NSArray le plus intérieur, il semble ajouter le même dictionnaire au NSArray contenu dans chaque de les NSDictionaries externes. Voici comment j'ajoute la NSDictionary la plus interne au plus profond NSArray:

[[outerDict objectForKey:@"innerArray"] addObject:innerDict]; 

Donc, pour résumer, la sortie que je veux quelque chose comme ceci:

<outerArray> 

    <outerDict1> 
     <string> 
     <innerArray1> 
      <innerDict1> 
      <innerDict2> 
     </innerArray1> 
    </outerDict1> 

    <outerDict2> 
     <string> 
     <innerArray2> 
      <innerDict3> 
      <innerDict4> 
     </innerArray2> 
    </outerDict2> 

<outerArray> 

Mais ce que je suis en fait obtenir est la suivante:

<outerArray> 

    <outerDict1> 
     <string> 
     <innerArray1> 
      <innerDict1> 
      <innerDict2> 
      <innerDict3> 
      <innerDict4> 
     </innerArray1> 
    </outerDict1> 

    <outerDict2> 
     <string> 
     <innerArray2> 
      <innerDict1> 
      <innerDict2> 
      <innerDict3> 
      <innerDict4> 
     </innerArray2> 
    </outerDict2> 

<outerArray> 

Notez que les NSDictionaries internes sont ajoutés à chaque innerArray. Pour la vie de moi, je ne peux pas comprendre pourquoi !!

Toute aide serait grandement appréciée, merci!

-Matt

+0

Pourriez-vous poster le code qui crée tout cet outerArray? '[[externalDict objectForKey: @" innerArray "] addObject: innerDict];' semble correct. –

Répondre

4

Vous devez poster plus de code.

[[outerDict objectForKey:@"innerArray"] addObject:innerDict]; 

ajoute innerDict seulement à innerArray dans outerDict, rien d'autre.

Cela dit, vous aurait pu mettre le même innerArray deux fois en deux différents outerDict, comme ceci:

NSMutableArray* innerArray=[NSMutableArray array]; 

[outerDict1 setObject:innerArray forKey:@"innerArray"]; 
[outerDict2 setObject:innerArray forKey:@"innerArray"]; 

Cela ajoute la même innerArray deux fois, pas deux tableaux indépendants. Ensuite, si vous modifiez le innerArray dans outerDict1, cela va également modifier le innerArray dans outerDict2, car ces deux sont les mêmes tableaux.

+0

Wow merci pour la réponse rapide et précise! Tu avais raison, c'est que j'avais ajouté la même instance du innerArray à chaque outerDict. Problème résolu. – mag725

+0

Nous en SO sont formés pour lire dans votre esprit :) – Yuji

Questions connexes