字典转模型方法总结

第一步:将字典的元素转为实例变量,其中注意的是类型的不同;

代码如下:

 1 //
 2 //  HMQuestion.h
 3 //  01-超级猜图
 4 //
 5 //  Created by Administrator on 15/10/7.
 6 //  Copyright  2015年 ccsu. All rights reserved.
 7 //
 8
 9 #import <Foundation/Foundation.h>
10
11 @interface HMQuestion : NSObject
12 @property (nonatomic,copy) NSString *answer; //注意NSString类型的是copy
13 @property (nonatomic,copy) NSString *icon;
14 @property (nonatomic,copy) NSString *title;
15 @property (nonatomic,strong) NSArray *options;//NSArray类型的是strong
16
17 -(instancetype)initWithDict:(NSDictionary *)dict;
18 +(instancetype)questionWithDict:(NSDictionary *)dict;
19 /**返回所有题目数组*/
20 +(NSArray *)questions;
21 @end

第三步写类方法:(注意逻辑)

第四步字典转模型:(注意步骤)

 1 //
 2 //  HMQuestion.m
 3 //  01-超级猜图
 4 //
 5 //  Created by Administrator on 15/10/7.
 6 //  Copyright  2015年 ccsu. All rights reserved.
 7 //
 8
 9 #import "HMQuestion.h"
10
11 @implementation HMQuestion
12 -(instancetype)initWithDict:(NSDictionary *)dict{
13     self = [super init];
14     if (self) {
15         [self setValuesForKeysWithDictionary:dict];
16     }
17     return self;
18 }
19 +(instancetype)questionWithDict:(NSDictionary *)dict{
20
21     return [[self alloc]initWithDict:dict];
22 }
23
24
25 +(NSArray *)questions{
26     NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"questions.plist" ofType:nil]];
27     NSMutableArray *arrayM = [NSMutableArray array];
28
29     for (NSDictionary *dic in array ) {
30         [arrayM addObject:[self questionWithDict:dic]];
31
32     }
33     return arrayM;
34 }

第五步:在主文件中引用文件创建实例对象,进行懒加载:

 1 //
 2 //  ViewController.m
 3 //  01-超级猜图
 4 //
 5 //  Created by Administrator on 15/10/6.
 6 //  Copyright  2015年 ccsu. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10 #import "HMQuestion.h"
11
12 @interface ViewController ()
13 @property (weak, nonatomic) IBOutlet UIButton *iconButton;
14 @property(nonatomic,strong)UIButton *cover;
15 @property(nonatomic,strong)NSArray *questions;
16 @end
17
18 @implementation ViewController
19
20 -(NSArray *)questions
21 {
22     if (_questions == nil) {
23         _questions = [HMQuestion questions];
24     }
25     return _questions;
26
27 }

第六步 :测试是否成功

1 -(void)viewDidLoad
2 {
3     [super viewDidLoad];
4     NSLog(@"%@",self.questions);
5    // for (HMQuestion *obj in self.questions) {
6    //   NSLog(@"%@",obj);
7    // }
8 }

测试优化:重写description方法(如果出现中文可能会出现乱码,所以需要引入NSArray+Log.h和NSArray+Log.m文件,直接添加就可以,不用头文件引用):

1 -(NSString *)description
2 {
3     return [NSString stringWithFormat:@" <%@: %p>{answer:%@,icon:%@,title:%@, options:%@}",                self.class,self,self.answer,self.icon,self.title,self.options];
4
5
6 }

在viewDidLoad中优化如下:

1 -(void)viewDidLoad
2 {
3     [super viewDidLoad];
4     //NSLog(@"%@",self.questions);
5     for (HMQuestion *obj in self.questions) {
6         NSLog(@"%@",obj);
7     }
8 }

附加:NSArray+Log.h和NSArray+Log.m文件:

 1 //
 2 //  NSArray+Log.h
 3 //  应用程序管理
 4 //
 5 //  Created by 刘凡 on 14/8/14.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8
 9 #import <Foundation/Foundation.h>
10
11 @interface NSArray (Log)
12
13 @end

 1 //
 2 //  NSArray+Log.m
 3 //  应用程序管理
 4 //
 5 //  Created by 刘凡 on 14/8/14.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8
 9 #import "NSArray+Log.h"
10
11 @implementation NSArray (Log)
12
13 - (NSString *)descriptionWithLocale:(id)locale
14 {
15     NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
16
17     for (id obj in self) {
18         [strM appendFormat:@"\t%@,\n", obj];
19     }
20
21     [strM appendString:@")\n"];
22
23     return strM;
24 }
25
26 @end

时间: 2024-08-13 01:27:56

字典转模型方法总结的相关文章

字典转模型的三种方法之四:总结

模型 1 // 2 // YSFoodTypeModule.h 3 // YSUiSplitViewController 4 // 5 // Created by ys on 15/12/12. 6 // Copyright (c) 2015年 ys. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 11 @interface YSFoodTypeModule : NSObject 12 13 @proper

ios开发runtime学习五:KVC以及KVO,利用runtime实现字典转模型

一:KVC和KVO的学习 #import "StatusItem.h" /* 1:总结:KVC赋值:1:setValuesForKeysWithDictionary实现原理:遍历字典,得到所有的key,value值,再利用kvc, setVaue forkey来为value赋值 2: [item setValue:@"来自即刻笔记" forKey:@"source"],内部的底层实现, 1.首先去模型中查找有没有setSource,找到,直接调用

字典转模型知识点总结

由于刚基础,对于字典转模型中很多细节的知识点也知之甚少,所以将学习字典转模型中的相关问题进行了总结,其中都是我自己不太理解的.从加载到各个语句的解析,可能 有出入的地方. 字典转换模型时需要掌握的知识点,具体例子 app加载流程 1> app 从mainBundle中加载Plist 2> 按照plist中的数据数量先确定各个View的大小和位置 3> 不过,类似这样的很多图标,控件很多的 UI 设计,建议不使用故事板,而是使用代码创建,否则后期维护也麻烦. 当使用字典时,要将支持文件中放

福利-&gt;KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型. 废话不多说,直接上代码: 1.工具类(其实就是NSObject的一个分类)头文件 1 #import <Foundation/Foundation.h> 2 3 @interface NSObject (YSRuntime) 4 5 /** 6 返回当前类的属性数组 7 8 @return 属

字典转模型的三种方法之三:MJExtension全自动字典模型互转

1 #import "YSHomeViewController.h" 2 #import "UIImage+YS.h" 3 #import "UIBarButtonItem+YS.h" 4 #import "YStitleButton.h" 5 #import "AFNetworking.h" 6 #import "YSaccountTool.h" 7 #import "YSa

iOS开发——笔记篇&amp;关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结

关于字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用总结 一:Plist读取 1 /******************************************************************************/ 2 一:简单plist读取 3 4 1:定义一个数组用来保存读取出来的plist数据 5 @property (nonatomic, strong) NSArray *shops; 6 7 2:使用懒加载的方

字典转模型KVC和runtime二者实现与区别

我们知道在开发中,字典转模型是一种很常用的设计模式,当字典中元素的个数比较少的时候,我们可以直接用dic[key]去给模型对象的属性赋值,但是当字典中元素的个数比较多的时候,再用前面的解决方法就不行了,所以就有了KVC(key value coding:键值编码)字典转模型的设计模式. KVC的设计原理: [item setValue:@"value" forKey:@"property"]: 1.首先去模型中查找有没有setProperty,找到,直接调用赋值 [

关于字典转模型的个人理解

1.字典跟模型的优缺点比较: 1>字典在使用key的时候Xcode不会有提示,容易出错,模型就不会 2>①所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业 ②模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性 ③使用模型访问属性时,编译器会提供一系列的提示,提高编码效率 2.字典转模型的过程(中间加了一些个人想法) 1.>首先需要创建一个plist文件,将字典中的元素添加到plist文件中 注意:应该是创建的N

iOS开发UI篇—字典转模型

iOS开发UI篇—字典转模型 一.能完成功能的“问题代码” 1.从plist中加载的数据 2.实现的代码 // // LFViewController.m // 03-应用管理 // // Created by apple on 14-5-22. // Copyright (c) 2014年 heima. All rights reserved. // #import "LFViewController.h" @interface LFViewController () @proper