数据解析及model的封装
2016-07-22 16:07
459 查看
我们常常需要对数据进行解析,并且建立model存放数据,今天总结一下具体操作以及它们的封装。
1.数据解析并封装
建立一个文件用来进行数据解析。
.h文件
.m文件
2.model的封装
相比于数据解析的封装,model的封装要相对复杂一点,它的思路是首先要找到映射的字典(要找到key属性的对应关系,json中的key和model类的属性名会形成一个映射关系),然后获取到子类的属性名字,找到set方法,最后进行赋值。
1.数据解析并封装
建立一个文件用来进行数据解析。
.h文件
#import <Foundation/Foundation.h> @interface DataService : NSObject //加载 +(id) loadDataWithListName:(NSString *)listName; @end
.m文件
#import "DataService.h" @implementation DataService +(id)loadDataWithListName:(NSString *)listName { //获取文件 NSString *path = [[NSBundle mainBundle] pathForResource:listName ofType:@"json"]; //读取 NSData *jsonData = [NSData dataWithContentsOfFile:path]; //json--->data id data = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; return data; } @end
2.model的封装
相比于数据解析的封装,model的封装要相对复杂一点,它的思路是首先要找到映射的字典(要找到key属性的对应关系,json中的key和model类的属性名会形成一个映射关系),然后获取到子类的属性名字,找到set方法,最后进行赋值。
具体实现代码如下: .h文件 #import <Foundation/Foundation.h> @interface BaseModel : NSObject - (void) setvalueForAttributesWithDictionary:(NSDictionary *)keyedValues; @end .m文件 #import "BaseModel.h" @implementation BaseModel /** 转换方法: allKeys--->title---->setTitle(字符串)--->setTitle(方法) */ - (NSMutableDictionary *)_bulidRalationShip:(NSDictionary *)dic { NSArray *allkeys = [dic allKeys]; NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary]; for (NSString *key in allkeys) { if ([key isEqualToString:@"id"]) { //获取该类的字符串 NSString *className = NSStringFromClass([self class]); //创建一个string名字 NSString *newString = [NSString stringWithFormat:@"%@id", className]; //将新的string用来做model中的属性名,这里id要注意,不能直接用来做属性名,因为他是关键字 [mutableDic setObject:newString forKey:@"id"]; } else { //直接将key名字作为model的属性名 [mutableDic setObject:key forKey:key]; } } return mutableDic; } //创建一个字符串拼接方法 - (SEL)_findSetterMethod:(NSString *)name { //1.取首字母 NSString *firstLetter = [[name substringFromIndex:1] uppercaseString]; //2.截取剩下的字母 NSString *lastLetter = [name substringFromIndex:1]; //3.拼接 NSString *setterName = [NSString stringWithFormat:@"set%@%@:", firstLetter, lastLetter]; //4.SEL //从一个方法产生字符串 SEL setter = NSSelectorFromString(setterName); return setter; } //创建一个带字典的属性方法 - (void) setvalueForAttributesWithDictionary:(NSDictionary *)keyedValues { //1.获取到映射字典 NSMutableDictionary *relationShipDic = [self _bulidRalationShip:keyedValues]; //2.找到set方法 NSArray *allkeys = [relationShipDic allKeys]; for (NSString *key in allkeys) { NSString *propertName = [relationShipDic objectForKey:key]; SEL method = [self _findSetterMethod:propertName]; //3.赋值 id value = [keyedValues objectForKey:key]; //判断该方法是否能够是吸纳 if ([self respondsToSelector:method]) { [self performSelector:method withObject:value]; } } }
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 我是运营,我没有假期
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- DVI 视频接口图文解析
- DB2数据库的安装
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- 修复mysql数据库
- C#自写的一个HTML解析类(类似XElement语法)
- ruby 过程对象 解析
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- 简述MySQL分片中快速数据迁移
- MySQL数据备份之mysqldump的使用详解