数据模型的建立
2016-01-19 22:51
295 查看
开发中使用字典的坏处,最明显的就是plist文件中key名,需要手动敲出来,并且编译器不会报错。我在有一次项目打错了key,查了好久的错,结果才发现是这个初学者才会犯的错误。
如果要用请务必打开该plist的副本,粘贴复制。
因为该缺陷我们引入的模型的概念,大致的思路是
plist➡️字典数组➡️模型数组
model必须实现的
1.字典转模型的过程最好封装在模型内部
2.模型应该提供一个可以传入字典参数的构造方法
3.返回数据
代码如下
model类(假使plist中的key名有两个name,和icon)
[/code]
[/code]
获取plist,并将数据传给model类。
[/code]
然后可以验证啦
[/code]
简单的写了个demo来介绍,更加复杂的用法就是后话了。
如果要用请务必打开该plist的副本,粘贴复制。
因为该缺陷我们引入的模型的概念,大致的思路是
plist➡️字典数组➡️模型数组
model必须实现的
1.字典转模型的过程最好封装在模型内部
2.模型应该提供一个可以传入字典参数的构造方法
3.返回数据
代码如下
model类(假使plist中的key名有两个name,和icon)
#import <Foundation/Foundation.h>
@interface MyModel : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *icon;
-(instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)appWithDict:(NSDictionary *)dict;
@end
[/code]
#import "MyModel.h"
@implementation MyModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
//字典转模型的过程
if (self = [super init]) {
self.name = dict[@"name"];
self.icon = dict[@"icon"];
}
//返回数据
return self;
}
//为了更好的协作
+ (instancetype)appWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
@end
[/code]
获取plist,并将数据传给model类。
- (NSArray *)app{
if (_apps == nil) {
//获得plist全路径
NSString *path = [[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
//做个遍历将dictArray所有字典转成模型对象放到新的数组中
NSMutableArray *Apparray = [NSMutableArray array];
for (NSDictionary *dict in dictArray) {
// MyModel *app = [[MyModel alloc]initWithDict:dict];
MyModel *app = [MyModel appWithDict:dict];
[Apparray addObject:app];
}
_apps =Apparray;
}
return _apps;
}
[/code]
然后可以验证啦
[self app];
for (int index = 0; index<10; index++) {
MyModel *modelInfo = self.apps[index];
NSString *modelName = modelInfo.name;
NSString *modelIcon = modelInfo.icon;
}
//打上断点或者打印一下观察一下是否正常输出
[/code]
简单的写了个demo来介绍,更加复杂的用法就是后话了。
相关文章推荐
- python实现mysql备份的脚本
- 倒序索引的原理和在全文搜索中的应用
- 函数模板
- 第五天课程(6个项目)-琐碎知识
- 区域及分离、Js压缩、css、jquery扩展
- volatile 和 sig_atomic_t
- 安卓Gradle多渠道打包
- Android 检测SD卡状态
- python list的一些用法
- CSS(Cascading Style Shee)
- 如何在在页面中清除一个已知的cookie?
- Spring与WebSocket的整合
- MAT内存分析
- ReadWriteLock rwl = new ReentrantReadWriteLock();读写锁
- 2015年开源项目荣登GitHub十强榜单
- 如何在Spring中集成Hessian框架
- 2015年开源项目荣登GitHub十强榜单
- 用运oracel中的伪列rownum分页
- 75. Sort Colors
- 服务端软件的服务品质