Czy ktoś wykonał rekursywne uporządkowane przemieszczenie NSDictionary o nieznanej strukturze? Chciałbym wziąć dowolny NSDictionary i przetworzyć każdy poziom w hierarchicznej kolejności.Rekurencyjnie przechodzić przez NSDictionary o nieznanej strukturze
1) Dane pochodzą ze sprawdzonego JSON. Czy można bezpiecznie powiedzieć, że NSDictionary stworzony z frameworka SBJSON (JSON Framework) spowodowałby tylko połączenie zagnieżdżonych słowników, tablic i dowolnych listków?
2) W jaki sposób można wykonać ogólne przejście przy użyciu szybkiego wyliczania, które działa zarówno w przypadku tablic, jak i słowników? Za pomocą poniższego kodu, gdy dojdę do słownika w tablicy, przestaje on przechodzić. Jeśli jednak kontynuuję rekursję w warstwie tablicowej (w celu sprawdzenia słowników w tablicach), zostanie ona odtworzona w następnej iteracji id value = [dict valueForKey:key];
za pomocą SIGABRT -[__NSCFDictionary length]: unrecognized selector sent to instance
. Nie wiem, dlaczego to byłby problem, ponieważ przeszedłem już do tej linii ze słownikiem najwyższego poziomu (gdzie znaleziono tablicę słowników poziomu podrzędnego).
-(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]);
}
}
}
}
Dziękujemy
Robisz to za każdym razem, gdy NSLog NSDictionary. –
Dobrze, ale ogólnie rzecz biorąc, celem jest przechwytywanie i przetwarzanie zagnieżdżonych obiektów w procesie, a nie tylko ich rejestrowanie. –
Musisz tylko nauczyć się używać 'isKindOfClass'. –