用模型取代字典的好处

使用字典的坏处

一般情况下,设置数据和取出数据都使用“字符串类型的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. Hadoop CDH版本安装和启动(CentOS7)

    1.创建hadoop组和用户,useradd hadoop passwd hadoop groupadd hadoops usermod -G hadoops hadoop(将hadoop添加到had ...

  2. Docker之镜像地址

    转载自https://www.cnblogs.com/doraman/p/9570891.html 官方docker hub 官方:https://hub.docker.com/explore/ 常用 ...

  3. python实现登录密码重置简易操作

    需求: 1.用户输入密码正确登录 2.用户输入密码错误退出并调用函数继续输入 3.用户输入密码符合原先给定的一个值时,允许用户重置密码,并且可以用新密码登录 4.输入三次后禁止输入 虽然贴别的简单,但 ...

  4. 树莓派ssh总掉线

    之前入手了一个树莓派,但是远程ssh连接经常掉线,开始以为是电源不行,导致机器重启,后面加了一个显示器,观察了一段时间,发现机器并没有重启,应该是WiFi掉线了,在网上发现,树莓派如果一段网络没有流量 ...

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

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

  6. java web基础

    WEB基础 C/S:即服务器-客服机(Client-Server)结构.C/S结构通常采用两层结构,服务器负责数据的管理,客户机负责完成与用户的交互任务.客户通过局域网与服务器相连,接受用户的请求,并 ...

  7. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(二)

    上文已经介绍了Identity Service的实现过程.今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关. 回顾 <Angular SPA基于Ocelot ...

  8. OAUTH开放授权

    OAUTH开放授权 OAUTH开放授权为用户资源的授权提供了一个安全的.开放而又简易的标准.OAUTH的授权不会使第三方触及到用户的帐号信息例如用户名与密码等,即第三方无需使用用户的用户名与密码就可以 ...

  9. SPL数据结构

    数据结构是计算机存储.组织数据的方式. SPL提供了双向链表.堆栈.队列.堆.降序堆.升序堆.优先级队列.定长数组.对象容器. 基本概念Bottom:节点,第一个节点称Bottom:Top:最后添加的 ...

  10. WordPress 获取文章内容页特色图像地址

    WordPress获取特色图像地址主要需要用到两个函数get_post_thumbnail_id和wp_get_attachment_image_src.下面是分别获取小.中.大.完整.指定图片规格的 ...