- 遇到字典里面又套了一层字典
重写基类model的初始化init方法
- (instancetype)initWithDictionary:(NSDictionary *)dictionary{
self = [super init];
if (self) {
//vc里两句合一句
[self setValuesForKeysWithDictionary:dictionary];
}
return self;
}
然后将这个方法声明出去, 在遇到字典里面又套了一层字典时, 也就是说其中一个key对应一个新的字典
例子
http://v3.wufazhuce.com:8000/api/movie/49/story/1/0
![](https://img.haomeiwen.com/i1717750/5c9d6ccb701b30c7.png)
![](https://img.haomeiwen.com/i1717750/099328ee44db226c.png)
![](https://img.haomeiwen.com/i1717750/c0d7e9f8bf406e65.png)
注意里面套着的user, 不要等到cell类的model赋值里面才把这层user解开, 在解析时就顺便解了, 所以把user先创建一个类, 然后作为外层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.需要用的属性即可
- 如果请求下来的数据有诸如title, id的关键字需要过滤
在model类中
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if ([key isEqualToString:@"id"]) {
self.idNew = value;
}
}
以后需要调用.id的地方就调用idNew即可
- 如果一段解析结果如图所示
![](https://img.haomeiwen.com/i1717750/41f334600d248f41.png)
则解出来的response在VC可以直接, 不用遍历每一个key值
for (NSDictionary *dic in response[@"data"][@"data"]) {
self.dataModel =[[MovieDataModel alloc] initWithDataSource:dic];
[self.dataSource addObject:_dataModel];
}
网友评论