- 温馨提醒:今天使用cocoaPods导入最新版本,使用时发现需要在方法名称前面添加mj_。话说到现在我才使用cocoapods,是有多懒。。。
模型代码
// ZZYProjectModel.h
#import <Foundation/Foundation.h>
@class ZZYProjectLeaderModel;
@interface ZZYProjectModel : NSObject
@property (nonatomic, copy) NSString * ID;
@property (nonatomic, copy) NSString * name;
@property (nonatomic, copy) NSString * progress;
@property (nonatomic, strong) NSArray * members;
@property (nonatomic, strong) ZZYProjectLeaderModel * leader;
@end
// ZZYProjectModel.m
#import "ZZYProjectModel.h"
#import "ZZYProjectMemberModel.h"
@implementation ZZYProjectModel
+ (NSDictionary *)objectClassInArray
{
return @{@"members":[ZZYProjectMemberModel class]};
}
+ (NSDictionary *)replacedKeyFromPropertyName
{
return @{@"dec":@"description",
@"ID":@"id"};
}
首先我们分析数据的层次结构:
- 数据最外层是一个字典,我们需要获得的是字典中的 projects 数组数据
- projects 数组是一个一个的字典,而这个字典中又包含字典 leader 和字典数组 members
字典转换模型分析
- 此处我是将字典 leader 与 字典数组 members 分别放在了两个模型 ZZYProjectLeaderModel 与 ZZYProjectMemberModel中
- 上述两个模型统一位于模型 ZZYProjectModel 中
控制器中模型的创建过程
//在数据网络请求成功之后,获取到需要的数据
NSArray * dictArr = [NSArray arrayWithArray:responseObject[@"data"][@"projects"]];
//调用MJExtension的方法,将字典数组转化为模型数组
NSArray * modelsArr = [ZZYProjectModel objectArrayWithKeyValuesArray:dictArr];
//遍历模型数组,将模型数组的模型数据赋值给一个数组
NSMutableArray * arr = [NSMutableArray array];
for (ZZYProjectModel * model in modelsArr) {
[arr addObject:model];
}
//此处可以将数组赋值给dataArr数据源数组,进行相应的操作
几点注意
- 创建模型的时候要保证模型的属性与返回的数据中字典的key值相同
- 当服务器返回的数据key值与系统关键字冲突的时候,最常见的例如:id,我们需要在模型.m文件中使用下述方法替换关键字
+ (NSDictionary *)replacedKeyFromPropertyName
- 字典中包含数组字典的时候,想要将数组字典页转换为模型,需要在字典对应的模型中,声明数组字典对应key指的数组;并且在.m文件中使用下述方法声明该数组中的成员变量的类型
+ (NSDictionary *)objectClassInArray
- 本人最常用的MJExtension字典转模型的方法
-
+ (NSMutableArray *)objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
字典数组转换成模型数组