有没有人做过一个未知结构的NSDictionary的递归遍历?我想采取任何NSDictionary并按层次顺序处理每个级别。递归遍历未知结构的NSDictionary
1)此数据来自验证的JSON。可以肯定地说,从像SBJSON(JSON Framework)这样的框架创建的NSDictionary只会导致嵌套字典,数组和任意叶子的组合?
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]);
}
}
}
}
非常感谢
你每当你NSLog一个NSDictionary都这样做。 – 2012-02-08 04:09:45
没错,但总的来说就是捕获和处理过程中的嵌套对象,而不仅仅是记录它们。 – 2012-02-08 17:33:20
你只需要学习如何使用'isKindOfClass'。 – 2012-02-08 18:30:12