NSDictionary 枚举二级
NSDictionary enumerate second level
考虑以下 NSDictionary:
展开后如下所示:
我想为每个 "features" 键创建一个 NSObject,"geometry" 和 "type" 作为 属性,但我无法得到我的绕过
[myDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
方法。有没有办法通过键名来表示入口级别?
我确实四处搜索了很多,但 none 我发现的东西似乎是合适的。希望大家多多耐心。
以下是我创建要素对象的方式:
@interface Feature : NSObject
@property (nonatomic, strong) NSString *geometry; //case is important
@property (nonatomic, strong) NSString *type; //case is important
@end
然后我会用KVC来创建它。所以我需要实现方法 setValue:forUndefinedKey
来避免崩溃:
@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];
}
考虑以下 NSDictionary:
展开后如下所示:
我想为每个 "features" 键创建一个 NSObject,"geometry" 和 "type" 作为 属性,但我无法得到我的绕过
[myDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
方法。有没有办法通过键名来表示入口级别?
我确实四处搜索了很多,但 none 我发现的东西似乎是合适的。希望大家多多耐心。
以下是我创建要素对象的方式:
@interface Feature : NSObject
@property (nonatomic, strong) NSString *geometry; //case is important
@property (nonatomic, strong) NSString *type; //case is important
@end
然后我会用KVC来创建它。所以我需要实现方法 setValue:forUndefinedKey
来避免崩溃:
@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];
}