BaseModel
2016-01-06 21:09
239 查看
使用时 直接在需要 model 数据的地方写上和数据名相对应的属性 就可以解析到 model 中了
补充:使用 GCD创建一个 BaseModel 提高效率
#import <Foundation/Foundation.h> @interface BaseModel : NSObject // 初始化方法 传入解析的json数据 - (id)initWithContentDic:(NSDictionary *)jsonDic; // 属性名的映射字典 @{jsonDic.key : model.attringbute} @property (nonatomic, copy)NSDictionary *mapDic; @end
#import "BaseModel.h" @implementation BaseModel - (id)initWithContentDic:(NSDictionary *)jsonDic { if (self = [super init]) { [self setAttributesWithDic:jsonDic]; } return self; } - (void)setAttributesWithDic:(NSDictionary *)jsonDic { #pragma mark--- 普通字符的赋值 //1. 将jsonDic中的所有的key值 转换成set方法 for (NSString *key in [jsonDic allKeys]) { // 对key之进行操作 --> setKey: NSString *bigan = [[key substringToIndex:1] uppercaseString];// 获取key值的首字母并大写 NSString *end = [key substringFromIndex:1]; // 获取key值除首字母外的其他字符 // 获取最后的set方法名 NSString *mothodString = [NSString stringWithFormat:@"set%@%@:",bigan,end]; // 将方法名转换成set方法 SEL mothod = NSSelectorFromString(mothodString); // 2. 判断model类是否相应set方法,如果是的话 调用set方法并赋值 if ([self respondsToSelector:mothod]) { // 获取需要保存的数据 id value = [jsonDic objectForKey:key]; // 确定value不为空 if (![value isKindOfClass:[NSNull class]]) { // 调用set方法并赋值 [self performSelector:mothod withObject:value]; } } } #pragma mark--- 特殊字符的赋值 for (NSString *key in self.mapDic) { // 获取model对象中的特殊字符的属性名 NSString *attribute = [self.mapDic objectForKey:key]; // 对key之进行操作 --> setKey: NSString *bigan = [[attribute substringToIndex:1] uppercaseString];// 获取key值的首字母并大写 NSString *end = [attribute substringFromIndex:1]; // 获取key值除首字母外的其他字符 // 获取最后的set方法名 NSString *mothodString = [NSString stringWithFormat:@"set%@%@:",bigan,end]; // 将方法名转换成set方法 SEL mothod = NSSelectorFromString(mothodString); // 2. 判断model类是否相应set方法,如果是的话 调用set方法并赋值 if ([self respondsToSelector:mothod]) { // 获取需要保存的数据 id value = [jsonDic objectForKey:key]; // 确定value不为空 if (![value isKindOfClass:[NSNull class]]) { // 调用set方法并赋值 [self performSelector:mothod withObject:value]; } } } } @end
补充:使用 GCD创建一个 BaseModel 提高效率
dispatch_apply([jsonDic allKeys].count, dispatch_get_global_queue(0, 0), ^(size_t index) { NSLog(@"%@dddddddddddddddddddd",[NSThread currentThread]); NSString *key=[jsonDic allKeys][index]; // 对key之进行操作 --> setKey: NSString *bigan = [[key substringToIndex:1] uppercaseString];// 获取key值的首字母并大写 NSString *end = [key substringFromIndex:1]; // 获取key值除首字母外的其他字符 // 获取最后的set方法名 NSString *mothodString = [NSString stringWithFormat:@"set%@%@:",bigan,end]; // 将方法名转换成set方法 SEL mothod = NSSelectorFromString(mothodString); // 2. 判断model类是否相应set方法,如果是的话 调用set方法并赋值 if ([self respondsToSelector:mothod]) { // 获取需要保存的数据 id value = [jsonDic objectForKey:key]; // 确定value不为空 if (![value isKindOfClass:[NSNull class]]) { // 调用set方法并赋值 [self performSelector:mothod withObject:value]; } } });
相关文章推荐
- Git使用
- 2015高教社杯全国大学生数学建模竞赛题目
- Spring Cloud App(Service) Pom示例
- Unity_Shader开发_Shaderlab(三)---------2016.1.6
- 周易六十四卦——坤卦
- windows 2008 r2 ftp 问题
- 常用互动方法
- 必须要知道的Delegate
- (实训第二天)用C程序判断机器是大端模式还是小端模式,附源程序
- COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存运行原理
- Android.mk 样例
- 非常好的理解遗传算法的例子 .
- UC/OS-II基础知识之任务的同步与事件
- phpcms 站点管理增加联系方式备案等字段等
- 16.FragmentTabHost用法
- CRC16校验-MODBUS协议
- xss 测试
- C++11新特性应用--占位符(std::placeholders std::is_placeholder std::is_bind_expression)
- nohup-真正的Shell后台运行
- 用户界面开发基础