Qualcuno ha fatto una traversata ordinata ricorsiva di un NSDictionary di struttura sconosciuta? Mi piacerebbe prendere qualsiasi NSDictionary e processare ogni livello in ordine gerarchico.Attraversare in modo ricorsivo NSDictionary di struttura sconosciuta
1) Questi dati provengono da JSON convalidato. È sicuro dire che il NSDictionary creato da un framework come SBJSON (JSON Framework) risulterebbe in una combinazione di dizionari nidificati, array e foglie arbitrarie?
2) Come si può effettuare un attraversamento generico utilizzando l'enumerazione rapida che funziona sia per gli array che per i dizionari? Con il codice qui sotto, una volta arrivato a un dizionario all'interno di un array, smette di attraversare. Tuttavia, se continuo la ricorsione nella condizione dell'array (per verificare la presenza di dizionari all'interno degli array), si blocca sulla successiva iterazione di id value = [dict valueForKey:key];
con un SIGABRT -[__NSCFDictionary length]: unrecognized selector sent to instance
. Non so perché questo sarebbe un problema, perché ho già superato quella linea con un dizionario di primo livello (dove è stata trovata la serie di dizionari di sottolivello).
-(void)processParsedObject:(id)dict counter:(int)i parent:(NSString *)parent
{
for (id key in dict) {
id value = [dict valueForKey:key];
NSLog(@"%i : %@ : %@ -> %@", i, [value class], parent, key);
if ([value isKindOfClass:[NSDictionary class]])
{
i++;
NSDictionary* newDict = (NSDictionary*)value;
[self processParsedObject:newDict counter:i parent:(NSString*)key];
i--;
}
else if ([value isKindOfClass:[NSArray class]])
{
for (id obj in value) {
NSLog(@"Obj Type: %@", [obj class]);
}
}
}
}
Molte grazie
Si esegue questa operazione ogni volta che si esegue il log di un NSDictionary. –
Giusto, ma il punto in generale è quello di acquisire ed elaborare gli oggetti nidificati nel processo, non solo registrarli. –
Hai solo bisogno di imparare come usare 'isKindOfClass'. –