2010-12-24 3 views
0

J'ai un tableau qui est profond de plusieurs niveaux et je me demande quel est le meilleur moyen d'obtenir l'une des valeurs de l'élément enfant qui est profonde dans mon tableau.iPhone: Obtenir de la valeur dans un tableau multidimensionnel

Je suppose que j'ai besoin d'utiliser une méthode récursive, mais quelle est la meilleure façon de le faire? Ou y a-t-il un moyen plus rapide de faire cela?

Le tableau provient d'un parseur XML que j'utilise qui construit tout dans un tableau comme celui-ci (en utilisant NSLog pour montrer la structure):

{ 
     children =   (
         { 
       children =     (
             { 
         children =       (
                 { 
           children =         (
           ); 
           data = 12; 
           element = AssetID; 
          } 
         ); 
         data = ""; 
         element = "ns1:GetUserIdByUsernameResponse"; 
        } 
       ); 
       data = ""; 
       element = "SOAP-ENV:Body"; 
      } 
     ); 
     data = ""; 
     element = "SOAP-ENV:Envelope"; 
    } 

Ce que je voudrais dire, c'est les données AssetID , qui dans ce cas est 12.

+0

Vous allez devoir fournir plus d'informations pour quiconque de répondre à cette correctement. –

+0

Mis à jour avec plus de détails et de code. –

Répondre

1

On dirait que l'analyseur renvoie un NSDictionary pour chaque élément avec une clé "children" qui est un NSArray d'éléments enfants.

Si la réponse sera toujours dans ce format avec l'élément AssetID toujours dans cette position, vous pouvez y accéder directement sans utiliser de récursion ou de bouclage.

Utilisez quelque chose comme ceci:

//"parserResultObject is the object the parser returns to you 
NSDictionary *bodyDict = [[parserResultObject objectForKey:@"children"] objectAtIndex:0]; 
NSDictionary *responseDict = [[bodyDict objectForKey:@"children"] objectAtIndex:0]; 
NSDictionary *assetIdDict = [[responseDict objectForKey:@"children"] objectAtIndex:0]; 

//assuming AssetID's data is stored as an NSNumber... 
int assetIdData = [[assetIdDict objectForKey:@"data"] intValue]; 
Questions connexes