用模型取代字典的好处

使用字典的坏处

一般情况下,设置数据和取出数据都使用“字符串类型的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
												

iOS-字典转模型(单模型)的实现的更多相关文章

  1. IOS 字典快速转换为Model 模型

    一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例.操作生成页面. 但是原生的内容是没有直接通过Json获取M ...

  2. IOS 字典模型互转框架 MJExtension

    IOS 字典模型互转框架 MJExtension   能做什么? MJExtension是一套字典和模型之间互相转换的超轻量级框架 MJExtension能完成的功能 字典(JSON) -->  ...

  3. iOS字典转模型MJExtension使用

    如果项目是纯OC的建议使用,MJExtension是一套字典和模型之间互相转换的超轻量级框架,可以轻松完成: 字典(JSON) --> 模型(Model) 模型(Model) --> 字典 ...

  4. Yii表单模型使用及以数组形式提交表单数据

    按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...

  5. KVC简介 -字典转模型,模型转字典

    // 下面两个方法.都属于 KVC 的方法 // KVC 是 cocoa 的大招.间接给对象属性设置数值 // 程序运行过程中,动态给对象属性设置数值.不关心 .h 中是怎样定义的 //      仅 ...

  6. Angular Reactive Form - 填充表单模型

    setValue 使用setValue,可以通过传递其属性与FormGroup后面的表单模型完全匹配的数据对象来一次分配每个表单控件值. 在分配任何表单控件值之前,setValue方法会彻底检查数据对 ...

  7. C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息

    系列目录     [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...

  8. ASP。NET Web表单模型,部分呈现和事件

    下载EventExample.zip - 41.33 KB 下载EventandAjaxExample.zip - 41.94 KB 介绍 通过参考ASP获得Web应用程序环境及其约束的概述.NET ...

  9. 新上线!3D单模型轻量化硬核升级,G级数据轻松拿捏!

    "3D模型体量过大.面数过多.传输展示困难",用户面对这样的3D数据,一定不由得皱起眉头.更便捷.快速处理三维数据,是每个3D用户对高效工作的向往. 在老子云最新上线的单模型轻量化 ...

  10. OSG-简单模型控制

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

随机推荐

  1. quartzJob

    定时任务的时间修改.暂停.立即执行 定时任务的修改.暂停主要是调用quartz内置方法pauseJob().resumeJob().triggerJob()等方法 //暂停一个job JobKey j ...

  2. Quartz3.0定时任务学习之异步调度器

    前言 Quartz3与Quartz2的主要区别有两点: 1,Quartz3将它的资源类库拆的更细了,比如,想使用Quartz3开发,最少要引用Quartz,Quartz.Jobs,Quartz.Plu ...

  3. JS如何判断是否已经引入某个css或是js?

    http://bbs.csdn.net/topics/390541081 function isInclude(name){     var js= /js$/i.test(name);     va ...

  4. iframe中有ajax,设置iframe自适应高度

    ------------------------------------------------------------------- http://www.jb51.net/article/1578 ...

  5. poj1486二分匹配 待填坑

    Sorting Slides Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4777   Accepted: 1867 De ...

  6. CF918C The Monster

    题目链接:http://codeforces.com/contest/918/problem/C 知识点: 贪心 解题思路: 枚举起点(当起点就是\(')'\)时直接跳过)并在此基础上遍历字符串,用一 ...

  7. vue2.0 axios前后端数据处理

    目前主流的 Vue 项目,都选择 axios 来完成 ajax 请求,而大型项目都会使用 Vuex 来管理数据. 前言: 使用 cnpm 安装 axios cnpm install axios -S ...

  8. get_client_ip()

    get_client_ip()获取ip地址,在开启IPv6协议的主机上会全部返回0.0.0.0原因是他会把ipv6地址认为是非法地址而转换成0.0.0.0,而ipv4地址在ipv6主机上用get_cl ...

  9. zepto快速入门教程

    * zepto* 特点:1.体积8kb2.针对移动端的框架3.语法同jquery大部分一样,都是$为核心函数4.目前功能完善的框架体积最小的左右* 同jquery相似的语法核心:$--作为函数使用参数 ...

  10. 2/3/4G网络架构

    1通讯网络演进 1.1 概念名词 LTE=Long Term Evolution=长期演进, 是3GPP制定的高数据率.低时延.面向分组域优化的新一代宽带移动通信标准项目. E-UTRAN 无线接入网 ...