Objective c NSDictionary枚举第二级

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

考虑以下问题:

展开时,它看起来如下所示:

我想为每个“features”键创建一个NSObject,并将“geometry”和“type”作为属性,但我无法理解

[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的值,然后将其添加到数组中?是的,设置值后可以添加要素对象。我更新了我的答案