编码篇-数据管理者Model

前言

      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的基础,也是编程的规范所在。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容