前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编码篇-数据管理者Model

编码篇-数据管理者Model

作者头像
進无尽
发布2018-09-12 18:38:45
4140
发布2018-09-12 18:38:45
举报
文章被收录于专栏:進无尽的文章進无尽的文章

前言

      Model是数据管理者和持有者,是数据解析层剥离ViewConyroller的关键所在。同是也是cell滑动不卡(省去每次解析)的好方式。


为什么使用Model

1)当录入一些数据的时候,由于Cell的重复利用,那些录好的数据可能就丢失了,此时需要Model来记录数据和Cell的赋纸操作。

(2)当需要记录Cell的一些操作时,比如,点击过的Cell 标题字体变灰色,没有点击过的 Cell 标题字体颜色是黑色的。此时就需要 Model来记录 Cell的点击状态了。

(3)解析数据的作用,把数据解析的逻辑剥离出来,并且达到一次解析,多处使用的效果。

Model与字典的赋值

PersonModel *test=[[PersonModel alloc]init];           test.name=dic[@"name"];         test.sex=dic[@"sex"];         test.age=dic[@"age"]; 但是一旦数据多了起来,却会非常繁琐

字典的快速赋值 setValuesForKeysWithDictionary

我们来看一下  这个方法的说明

/* Given a dictionary containing keyed attribute values, to-one-related objects, and/or collections of to-many-related objects, set the keyed values. Dictionary entries whose values are NSNull result in -setValue:nil forKey:key messages being sent to the receiver. */ - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;

意思是这个方法会从dic 中按 key 取值赋值给 对应的或相关的 本类中的  属性(通过  索引本类中的  set 方法实现)。

   有几点需要注意的地方:

1.后端JSON数据的每个字段和前端定义的model中的每个字段命名一致

     setValuesForKeysWithDictionary就可以帮助我们一一对应的把model的每个字段赋好值。

2.后端JSON数据中有  ,model没有对应的属性,崩溃。。。。。

解决办法实现- (void)setValue:(nullableid)value forUndefinedKey:(NSString*)key;并不需要在方法中写任何内容。

    3.后端JSON数据中没有  ,model有对应的属性,打印这个属性时是空的。

4.如果dic中的key与model中的变量名字不同,应该怎么赋值。

它可以让我们把命名不一致的字段手动赋值

-(void)setValue:(id)value    forUndefinedKey:(NSString*)key {if([key isEqualToString:@"id"])              {self.age=value;        } if([key isEqualToString:@"username"])            {self.name=value;          }   }

如何根据返回的 Json数据创建 Model 类

首先需要注意的一点是,判断返回的数据是不是 Json类型的,只需要注意一点即可:只要数据中只有  ""  , : {} []    这五种符号的就是 JSon,如果出现 =  ; 这样的符号就不是  Json数据了。

下面举个例子看下如何根据返回的 Json数据创建 Model 类;

你可以根据插件自动生成哪些个属性,但是一般插件生成的文件中 .m里面的内容并不友好,有时候会有错误

这里书写 Model属性有些技巧:

【1】我们先把最外层的结构找出来,折叠起内层的结构

【2】逐层展开,有需要就设置一个新的对象

【3】层层展开,外层对象包含调用内层对象即可。

.m中无须设置什么,如果怕有未知的 key 造成解析崩溃的话,可以在 .m中的每个类中实现 - (void)setValue:(nullableid)value forUndefinedKey:(NSString*)key;并不需要在方法中写任何内容。

最后使用的时候,像下面这样设置即可完成 Model的赋值,之后就可以使用了。


小结

数据管理者Model是MVC的基础,也是编程的规范所在。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.05.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 为什么使用Model
      • 如何根据返回的 Json数据创建 Model 类
        • 小结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档