OC:字典转模型

1 新建一个NSObject的类作为模型类:

#import <Foundation/Foundation.h>

@interface VSQuestion : NSObject

@property (nonatomic,copy)NSString *answer;

@property (nonatomic,copy)NSString *icon;

@property (nonatomic,copy)NSString *title;

@property (nonatomic,strong)NSArray *options;

- (instancetype)initWithDict:(NSDictionary*)dict;

+ (instancetype)questionWithDict:(NSDictionary*)dict;

@end

#import "VSQuestion.h"

@implementation VSQuestion

//在模型中写一个初始化方法,让ViewController调用这个方法,把字典作为参数传进来;初始化方法里会把传进来的字典里的内容一个个传给模型里的各个属性。

- (instancetype)initWithDict:(NSDictionary*)dict

{

if (self = [super init]) {

self.answer = dict[@"aswer"];

self.icon = dict[@"icon"];

self.title = dict[@"title"];

self.options = dict[@"options"];

}

return self;

}

//最好顺便提供一个工厂方法,方便别人调用。

+ (instancetype)questionWithDict:(NSDictionary*)dict

{

return [[self alloc]initWithDict:dict];

}

@end

2 在控制器里定义一个数组,然后重写get方法,让这个数组转为模型:

@interface ViewController ()

@property (nonatomic,strong)NSArray *questions;

@end

@implementation ViewController

- (NSArray*)questions

{

//首先判断一下是否为空,如果不为空则说明get方法已经调用过,所以直接返回。如果为空则实现以下方法。

if (_questions == nil) {

//创建数组:用mainBundle查找plist文件的路径,然后通过这路径把plist里的Array传出来。

NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"questions.plist" ofType:nil]];

//创建可变数组:因为可变数组可以用for循环,把对象一个个添加进去。

NSMutableArray *que = [[NSMutableArray array]init];

//创建for in循环,每一次循环都会把右边数组里的对象赋值给左边的对象,循环次数就是右边数组里的count值。

for (NSDictionary *dict in dictArray) {

//调用模型的初始化方法来创建模型:把对象传给模型的初始化方法,得到一个个模型对象。

VSQuestion *question = [[VSQuestion alloc]initWithDict:dict];

//把一个个模型对象添加到可变数组que里面。

[que addObject:question];

}

//把完整的模型传给控制器的数组。

_questions = que;

}

//返回一个模型

return _questions;

}

时间: 2024-10-13 22:16:43

OC:字典转模型的相关文章

iOS开发——高级技术精选OC篇&amp;Runtime之字典转模型实战

Runtime之字典转模型实战 如果您还不知道什么是runtime,那么请先看看这几篇文章: http://www.cnblogs.com/iCocos/p/4734687.html http://www.cnblogs.com/iCocos/p/4676679.html http://www.cnblogs.com/iCocos/p/4725527.html 关于runtime的详细介绍及其相关的小实例 好了,这里就不多废话了,直接开干! 先来看看怎么使用Runtime给模型类赋值 iOS开发

ios学习8_KVC和字典转模型

Key Value Coding是cocoa的一个标准组成部分,它能让我们能够通过name(key)的方式訪问属性,某些情况下极大地简化了代码.可称之为cocoa的大招. 例如以下的样例: 使用KVC的优点 不使用KVC - (id)tableView:(NSTableView *)tableview objectValueForTableColumn:(id)column row:(NSInteger)row { ChildObject *child = [childrenArray obje

iOS开发项目篇—25字典转模型第三方框架、运行时机制简介

iOS开发项目篇—25字典转模型第三方框架.运行时机制简介 一.使用第三方框架完成字典转模型 1.获取框架 在www.code4app.com网站中,搜索字典转模型 可以点击下载代码进行下载,也可以带github上去下载. 管理框架的好处:点击刷新按钮会刷新所有的项目. 2.使用 1.导入第三方框架 2.使用示例 错误提示: 在刷新的时候直接使用一行代码即可: 1 /**加载最新微博数据*/ 2 -(void)loadNewStatus 3 { 4 //1.获得请求管理者 5 AFHTTPReq

ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用

一:url转码,当url中涉及到中文的时候,要考虑转码,用UTF8对中文的url进行转码 #import "ViewController.h" @interface ViewController () @end @implementation ViewController #pragma mark ---------------------- #pragma mark Events -(void)touchesBegan:(NSSet<UITouch *> *)touche

ios开发- 利用运行时(runtime)字典转模型

现在的ios开发中,我们通常会使用MVC模式.当我们拿到数据的时候,我们要把数据转成模型使用. 一般情况我们拿到的数据都是字典.这是我们就需要将字典转成模型对象了. 当对象的属性很少的时候,我们可以直接单独写出字典的键值,进行转换. _属性 = dict["键"] 当对象的属性很多的时候,我们可以利用KVC批量设置. setValuesForKeysWithDictionary:<#(NSDictionary *)#> 但是KVC批量转的时候,有个致命的缺点,就是当字典中的

字典转模型知识点总结

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

【IOS问题】字典转模型,属性个数不匹配问题

一.字典转模型的键值对与模型属性不匹配问题 1. 字典的键个数 < 模型的属性个数 (key 能与模型的属性匹配) 1> .KVO 方式: - setValuesForKeysWithDictionary: 2> for循环的方式,一一赋值 2.字典的键个数 = 模型的属性个数 (key 能与模型的属性匹配) 同1. 3.字典的个数 > 模型的属性个数 (模型的属性为字典key 的其中一部分) 一共有三种解决方式 二.解决办法: 建立一个GXApp的模型,申明两个属性: name(

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,找到,直接调用赋值 [