Recursive Mapping - fcanas/OHMKit GitHub Wiki
You don't have to do anything special to get recursive mapping of mappable objects. If an object conforming to <OHMMappable>
has a property whose type also conforms to <OHMMappable>
, and the value for that key in the hydration dictionary is itself a dictionary, we'll instantiate a new model object and hydrate it. (If that didn't make sense, just read the next code snippet)
@interface MYClass : NSObject
@property (nonatomic, strong) NSString *name;
@end
@interface MYClass2 : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *favoriteWord;
@property (nonatomic, assign) NSInteger favoriteNumber;
@property (nonatomic, assign) MYClass *favoriteObject;
@end
OHMMappable([MYClass class]);
OHMMappable([MYClass2 class])
OHMSetMapping([MYClass2 class], @{@"favorite_word" : @"favoriteWord",
@"favorite_number": @"favoriteNumber",
@"favorite_object" : @"favoriteObject"});
MYModel *testModel = [[MYClass2 alloc] init];
NSDictionary *class2Response = @{@"name" : @"Fabian",
@"favorite_word" : @"absurd",
@"favorite_number": @2,
@"favorite_object": @{@"name" : @"Rock"}};
[testModel setValuesForKeysWithDictionary:class2Response];
Now, testModel.favoriteObject
is an instance of MYClass
hydrated with "Rock" as its name.
Internally, the new model object is initialized with [[ alloc] init]
, and then hydrated with [ setValuesForKeysWithDictionary:dictionary]
. If you have a model that needs special consideration for initialization, use an adapter block.