您的位置:首页 > 移动开发 > IOS开发

iOS-字典转模型(单模型)的实现

2015-10-28 22:02 459 查看
用模型取代字典的好处

使用字典的坏处

一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编译器不会有任何友善提示,需要手敲,

eg:dict[@"name"] =@"Jack";

NSString*name = dict[@"name"];

而手敲字符串key,key容易写错,并且Key如果写错了,编译器也不会有任何警告和报错,造成设错数据或者取错数据。

使用模型的好处

所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业。

模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性。

使用模型访问属性时,编译器会提供一系列的提示,提高编码效率。

而且使用模型,使得MVC的编程思想也能有很好的体现。

举例说明:

将入下结构的plist文件数据转为模型:



MyModel.h头文件定义

//  MyModel.h
//  AppManage
//
//  Created by IMAC on 15/10/19.
//  Copyright © 2015年 ysc. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MyModel : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *icon;

-(instancetype)initWith:(NSDictionary* )dict;
+(instancetype)initWith:(NSDictionary* )dict;

@end


yModel.h注意事项:

1.在plist文件中结构为@[@{}]这种形式,且Dictionary中有两组数据,所以在头文件中需要定义两个数行,并写属性的类型必须和plist中的key类型对应,属性的名称必须和value中保持一致。

2.除此以外,需要给外部提供相关的方法,方法最好同时提供对象方法和类方法。

MyModel.h文件实现 MyModel.m

</pre><pre name="code" class="objc" style="background-color: rgb(240, 240, 240);">@implementation MyModel

-(instancetype)initWith:(NSDictionary* )dict
{
if (self = [super init]) {
// 使用 kvc 进行设置 减少代码
[self setValuesForKeysWithDictionary:dict];
//_name = dict[@"name"];
//_icon = dict[@"icon"];
}
return self;
}

+(instancetype)initWith:(NSDictionary* )dict
{
return [[MyModel alloc] initWith:dict];

}
@end


/************************************************************************************/

MyModel.m注意事项:

在对属性赋值时,建议采用kvc方式赋值,这样能够在属性较多时大大减少代码量。

ViewController.m 文件

</pre><pre name="code" class="objc" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(240, 240, 240);">

#import "ViewController.h"

#import <QuartzCore/QuartzCore.h>
#import "MyModel.h"
#import "MyView.h"

#define COLUMN           3
#define yellowViewWidth  80
#define yellowViewHight  95

@interface ViewController ()

@property (strong, nonatomic) NSMutableArray *arrayDate;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self setUI];

}

-(NSMutableArray*)arrayDate
{
if (nil == _arrayDate) {
_arrayDate = [NSMutableArray array];
NSString *path = [[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
NSArray *tempArray = [[NSArray alloc] initWithContentsOfFile:path];

for (NSDictionary *dict in tempArray) {

MyModel *model = [MyModel initWith:dict];
[_arrayDate addObject:model];
}
}
return _arrayDate;
}



ViewController.m 文件的主意事项

我们给ViewController一个属性:@property (strong, nonatomic) NSMutableArray *arrayDate;


1.在转模型时,主要用到的方法就是

在使用该数组时,我们是这样赋值的:

MyModel *model = self.arrayDate[i];

所以为了方面使用,需要重写getter方法。

1)首先实例化可变数组 _arrayDate = [NSMutableArray array];

2)将数据plist文件读取到临时数组

3)使用for -in 将数据转化成model类型

4)再将数据添加到arrayDate存放的就是model类数据,该类包括两个属性(包含setter 和 getter方法),name 和 icon。

此操作后,即可使用model.name 和model.icon

</pre><pre name="code" class="objc">

完成效果图

</pre><pre name="code" class="objc">主要完成了从plist文件读取,自定义view,九宫格算法,imageView的圆角显示和下载的动画效果,模拟了应用管理</span>

码在:http://download.csdn.net/detail/yang198907/9221945


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: