zoukankan      html  css  js  c++  java
  • iOS开发——MJExtension复杂数组用法

    最近在看MJExtension的Demo,发现了一个plist文件直接转数组模型的方法。以前研究过但是浅尝辄止没有解决,这几天有时间,好好看了看,找到了解决办法,与大家分享。

    如果大家的项目中有这种嵌套数组对象的情况的plist文件,如:

    Screen Shot 2015-05-02 at 10.20.35 PM 即要转换成一个对象中存有另一个对象数组的情况。

    Screen Shot 2015-05-02 at 10.20.42 PM

    当没有这种复杂嵌套时,我们这样写:

       1:  -(NSArray *)groups{
       2:      if (!_groups) {
       3:   
       4:          _groups = [Group objectArrayWithFilename:@"cars_total.plist"];
       5:      }
       6:      return _groups;
       7:  }
    但是这样的话groups中的cars属性会被赋成一个 “含有NSDictionary的NSArray”变量,而不是“含有Car类的NSArray”

    并没有真正的转成模型,一开始我的解决方法是重写setCars方法,

    //-(void)setCars:(NSArray *)cars{
    ////    NSLog(@"%s",__func__);
    //    _cars = [NSMutableArray array];
    //    _cars = [Car modelArrayWithDictionaries:cars];
    //}

    modelArrayWithDictionaries是我自己实现的一个Dictionary数组转对象数组的方法,写的不优雅就不贴出来了。

    但是我们实际上是可以这样写的:

    写法一:

    在Group模型中

       1:  //+(NSDictionary *)objectClassInArray{
       2:  //    return @{@"cars":@"Car"};
       3:  //}

    写法二:

    在groups属性的getter里

       1:  (NSArray *)groups{
       2:      if (!_groups) {
       3:   
       4:          [Group setupObjectClassInArray:^NSDictionary *{
       5:              return  @{@"cars":@"Car"};
       6:          }];
       7:          _groups = [Group objectArrayWithFilename:@"cars_total.plist"];
       8:      }
       9:      return _groups;
      10:  }

    就可以实现直接转换成对象啦!

    关于MJExtension Demo中的其他发现:

    MJExtension的Demo中将 [x setupObjectClassInArray:…]放到了MJExtensionConfig

    类的+load方法中,Demo中其他地方没有任何对该类或该方法的引用。

    经过查询,发现原来load是OC中在载入一个类的时候自动调用的方法,真是一个进行配置的好方法!

    参考来源:

    Objective-C 类方法 load 和 initialize 的区别

    iOS MJExtension框架之字典数组转模型数组

    CoderMJLee/MJExtension

  • 相关阅读:
    【Hibernate框架】对象的三种持久化状态
    【Mybatis架构】Mapper映射文件中的#{}与${}
    【Mybatis架构】 延迟加载
    IDEA快捷键+使用小技巧
    Aop_AspectJ实现
    Aop_实践篇之过滤器
    Aop_思想篇
    超简单的Springboot中的日志管理配置
    SpringMVC+MYBatis企业应用实战笔记
    Spring学习
  • 原文地址:https://www.cnblogs.com/zeyang/p/4472656.html
Copyright © 2011-2022 走看看