- 遇到字典里面又套了一層字典
重寫基類model的初始化init方法
- (instancetype)initWithDictionary:(NSDictionary *)dictionary{
self = [super init];
if (self) {
//vc里兩句合一句
[self setValuesForKeysWithDictionary:dictionary];
}
return self;
}
然后將這個方法聲明出去, 在遇到字典里面又套了一層字典時, 也就是說其中一個key對應(yīng)一個新的字典
例子
http://v3.wufazhuce.com:8000/api/movie/49/story/1/0

1.png

2.png

3.png
注意里面套著的user, 不要等到cell類的model賦值里面才把這層user解開, 在解析時就順便解了, 所以把user先創(chuàng)建一個類, 然后作為外層model的一個model屬性聲明在外層model類.h中, 比如叫
@property (nonatomic, strong) MovieUserModel *userNew;
然后在.m中
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if ([key isEqualToString:@"user"]) {
self.userNew = [[MovieUserModel alloc] initWithDictionary:value];
}
}
這個initWithDictionary就是剛才在基類重寫的方法
然后在cell類中用到的時候直接model.userNew.需要用的屬性即可
- 如果請求下來的數(shù)據(jù)有諸如title, id的關(guān)鍵字需要過濾
在model類中
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if ([key isEqualToString:@"id"]) {
self.idNew = value;
}
}
以后需要調(diào)用.id的地方就調(diào)用idNew即可
- 如果一段解析結(jié)果如圖所示

JSON結(jié)果.png
則解出來的response在VC可以直接, 不用遍歷每一個key值
for (NSDictionary *dic in response[@"data"][@"data"]) {
self.dataModel =[[MovieDataModel alloc] initWithDataSource:dic];
[self.dataSource addObject:_dataModel];
}