Objective c NSDictionary枚举第二级
考虑以下问题: 展开时,它看起来如下所示: 我想为每个“features”键创建一个NSObject,并将“geometry”和“type”作为属性,但我无法理解Objective c NSDictionary枚举第二级,objective-c,nested,nsdictionary,Objective C,Nested,Nsdictionary,考虑以下问题: 展开时,它看起来如下所示: 我想为每个“features”键创建一个NSObject,并将“geometry”和“type”作为属性,但我无法理解 [myDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){ 接近。难道没有一种方法可以通过给出一个键名来表示入口级别吗 我确实到处找了很多,但我发现的东西似乎都不合适。希望您对我有点耐心。以下是我创建要素对象的方法: @interface Fea
[myDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
接近。难道没有一种方法可以通过给出一个键名来表示入口级别吗
我确实到处找了很多,但我发现的东西似乎都不合适。希望您对我有点耐心。以下是我创建要素对象的方法:
@interface Feature : NSObject
@property (nonatomic, strong) NSString *geometry; //case is important
@property (nonatomic, strong) NSString *type; //case is important
@end
然后我会用它来创建它。因此,我需要实现方法setValue:forundeinedkey
,以避免崩溃:
@implementation Feature
- (void) setValue:(id)value forUndefinedKey:(NSString *)key{
NSLog(@"key %@ does not exist", key);
}
@end
然后我假设您需要一个特征对象数组:
NSMutableArray *featureArray = [[NSMutableArray alloc] init];
要填充此数组,请执行以下操作:
NSMutableArray *featureArray = [[NSMutableArray alloc] init];
[dic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"key: %@", key);
if ([obj isKindOfClass:[NSArray class]])
{
NSArray *arr = (NSArray *)obj;
for (NSDictionary *childDic in arr) {
Feature *f = [[Feature alloc] init];
[childDic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull childKey, id _Nonnull childObj, BOOL * _Nonnull childStop) {
[f setValue:childObj forKey:childKey];
}];
[featureArray addObject:f];
}
}
}];
希望这有帮助。如果您知道存储的密钥,您可以执行以下操作:
NSMutableArray * pmaMyObjs= [NSMutableArray array];
NSArray* paFeatures= [myDict objectForKey:@"features"];
for(int i= 0; i < paFeatures.count; ++i)
{
NSDictionary * pdItem= [paFeatures objectAtIndex:i];
MyObj* pMyObj= [MyObj alloc] initWithGeo:[pdItem objectForKey:@"geometry"] properties:[pdItem objectForKey:@"properties"];
[pmaMyObjs addObject:pMyObj];
}
NSMutableArray*pmaMyObjs=[NSMutableArray];
NSArray*paFeatures=[myDict objectForKey:@“features”];
对于(int i=0;i
我不确定“initWithGeo:”是什么意思。你说你想从数据中创建对象,MyObj只是NSObject的一个子类的一个例子,initWithGeo是第一个参数标签,因此你可以在几何字段中传递。不知何故,f的所有属性都是零。我是否应该先设置f的值,然后将其添加到数组中?是的,设置值后可以添加要素对象。我更新了我的答案