我已经与这部分代码的方法:的NSDictionary for循环异常
NSDictionary *tmpDict = [self getJsonDictionary];
NSInteger tmpID;
for (NSDictionary *d in tmpDict) {
tmpID = [[d objectForKey:@"id"] integerValue];
}
tmpDict
是具有可变大小的NSDictionary。如果tmpDict
含有至少2个对象(2 NSDictionary中)它工作得很好,但如果只包含1个对象(1 NSDictionary中)抛出此异常:
-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x4e866d0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x4e866d0'
为什么呢?如何修复如果tmpDict
只有1个对象?
可能for (NSDictionary *d in tmpDict)
是问题,当tmpDict
有1个对象d
是NSCFString
,但是为什么?
- UPDATE
问题是,当tmpDict
有1个项目(一个的NSDictionary)的for (NSDictionary *d in tmpDict)
采取各种键/值项的字典,这是异常的原因。否则,如果tmpDict
有2+项是NSDictionary的NSDictionary,它运作良好。我需要一种方法来解决这个问题,仍然使用for循环。想法?
- 更新2 *
其实这段代码的作品,但它是多余的:
if ([tmpObject isKindOfClass:[NSDictionary class]]) {
tmpID = [[tmpObject objectForKey:@"id"] integerValue];
tmpProp2 = [tmpObject objectForKey:@"prop2"];
tmpProp3 = [tmpObject objectForKey:@"prop3"];
tmpProp4 = [tmpObject objectForKey:@"prop4"];
} else if ([tmpObject isKindOfClass:[NSArray class]]) {
for (NSDictionary *d in tmpObject) {
tmpID = [[d objectForKey:@"id"] integerValue];
tmpProp2 = [d objectForKey:@"prop2"];
tmpProp3 = [d objectForKey:@"prop3"];
tmpProp4 = [d objectForKey:@"prop4"];
}
}
它需要改进。
WRT更新2:唯一的改进是你可以从字典中获取项目。否则,这看起来不错。 –