Кто-нибудь сделал рекурсивный упорядоченный обход NSDictionary неизвестной структуры? Я хотел бы взять любой NSDictionary и обработать каждый уровень в иерархическом порядке.
1) Эти данные поступают от проверенного JSON. Можно ли с уверенностью сказать, что NSDictionary, созданный из таких структур, как SBJSON (JSON Framework), приведет только к комбинации вложенных словарей, массивов и произвольных листов?
2) Как можно провести общий обход с использованием быстрого перечисления, которое работает как для массивов, так и для словарей? С приведенным ниже кодом, как только я получу словарь в массиве, он перестает перемещаться. Однако, если я продолжу рекурсию в состоянии массива (чтобы проверить словари внутри массивов), она запустится на следующей итерации id value = [dict valueForKey:key];
с помощью -[__NSCFDictionary length]: unrecognized selector sent to instance
SIGABRT. Я не знаю, почему это было бы проблемой, потому что я уже прошел эту строку с помощью словаря верхнего уровня (где был найден массив подзаголовков).
-(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]);
}
}
}
}
Большое спасибо