JSONModel的模型嵌套

JSONModel的模型嵌套

我们解析数据的时候会遇到嵌套的数据,解析的时候会用到嵌套的模型,下面说下JSONModel嵌套的一些注意问题!
1.先简单说下JSONModel的简单用法
1.1单层模型 
.h文件
     

#import <JSONModel/JSONModel.h>


@interface WX_FriendZonePeiTuModel :JSONModel


// 朋友圈配图

//单张

@property (nonatomic,copy)NSString *pic;

// 多张

@property (nonatomic,strong)NSArray *data;

@property (nonatomic,copy)NSString *orders;

@property (nonatomic,copy)NSString *pid;     // 后台为id,用pid代替

@property (nonatomic,copy)NSString *name;

@end



.m文件



#import "WX_FriendZonePeiTuModel.h"


@implementation WX_FriendZonePeiTuModel

// pid代替id

+(JSONKeyMapper *)keyMapper {

    return [[JSONKeyMapperalloc]initWithModelToJSONDictionary:@{

                                                                  @"pid":@"id"

                                                                  }];

}

// 所有的属性都为可选类型,

+(BOOL)propertyIsOptional:(NSString *)propertyName {


    /* 可以设置某个属性为可选,下面的代码意为name为可选, 后台数据中没有name键

    if ([propertyName isEqualToString:@"name"]) {

        return YES;

    }

     */

    

    // 所有属性可选

    returnYES;

}


@end



// 模型用法

WX_FriendZonePeiTuModel *model = [[WX_FriendZonePeiTuModelalloc]initWithDictionary:dicterror:nil];

dict为解析的字典

2.模型嵌套的使用
2.1建立模型
.h文件

#import <JSONModel/JSONModel.h>


// 内层模型

@interface WX_MoudleItemModel :JSONModel


@property (nonatomic,strong)NSArray  *data;

@property (nonatomic,copy)NSString *orders;

@property (nonatomic,copy)NSString *addTime;

@property (nonatomic,copy)NSString *content;

@property (nonatomic,copy)NSString *fid;

@property (nonatomic,copy)NSString *name;

@property (nonatomic,copy)NSString *type;

@property (nonatomic,strong)NSArray <NSDictionary *> *pics;


@end


// 外层模型

@protocolWX_MoudleItemModel;  // 内层模型协议!!!!

@interface WX_MoudleSectionModel :JSONModel

@property (nonatomic,copy)NSString *addTime; // section时间

@property (nonatomic,strong)NSArray <WX_MoudleItemModel> *lists;  // 数组元素为内层模型!!!

@property (nonatomic,copy)NSString *rownum;

@end



.m文件

#import "WX_MoudleSectionModel.h"


@implementation WX_MoudleItemModel


+(BOOL)propertyIsOptional:(NSString *)propertyName {

    returnYES;

}


@end

@implementation WX_MoudleSectionModel


+(BOOL)propertyIsOptional:(NSString *)propertyName {

    returnYES;

}


@end






2.2  cell文件

在cell的.h文件里,直接引入外层模型.h文件 

#import "WX_FriendMutipleView.h"

#import <UIKit/UIKit.h>

@class WX_FriendZonePeiTuModel;

@interface WX_FriendZonePeiTuCell :UICollectionViewCell


/** weitu */

@property (nonatomic,strong)UIImageView *peiTuImV;

/** content */

@property (nonatomic,strong)UILabel     *content;

/** model */

@property (nonatomic,strong)WX_FriendZonePeiTuModel *model;

// 内层模型为collectionView的cell(外层模型为sectionHeader,写在reusebleView里)

@property (nonatomic,strong)WX_MoudleItemModel      *item;    

@property (nonatomic,strong)WX_FriendMutipleView *mutiView;


@end


cell 的.m文件里

-(void)setItem:(WX_MoudleItemModel *)item {

     /*

      你的代码...

     */

}

2.3  viewController文件

.m文件

#import "WX_MyFriendZoneViewController.h"

#import "WX_MoudleSectionModel.h"        // 引入外层模型.h文件

@class WX_MoudleItemModel;                // 内层模型


模型解析

-(void)xxx {

        if (data.count) {

            for (NSDictionary *modelDictin data) {

                WX_MoudleSectionModel *model = [[WX_MoudleSectionModelalloc]initWithDictionary:modelDicterror:nil];

                [weakSelf.peiTuArraddObject:model];

            }

        }

}


cell赋值

- (__kindofUICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    

    

    WX_MoudleSectionModel *model =self.peiTuArr[indexPath.section];    // 外层

    WX_MoudleItemModel    *items = model.lists[indexPath.item];         // 内层

    WX_FriendZonePeiTuCell *cell = [collectionViewdequeueReusableCellWithReuseIdentifier:peiTuCellforIndexPath:indexPath];

    cell.item = items;    // cell赋值

    return cell;

   

    

}


大功告成



我遇到的坑:


JSONModel 模型嵌套
Cell中声明的时候,不要@class ,要#import外层模型.h文件  ,并且在ViewController中引入外层模型的.h + @class 内层模型;
 不然会初现
-[__NSDictionaryM content]: unrecognized selector sent to instance xxxx

千万注意:模型.m文件里别写错了
+(BOOL)propertyIsOptional:(NSString
*)propertyName {
return YES;
}
而不是
+(
BOOL)propertyIsIgnored:(NSString
*)propertyName {
return YES;
}
我因为疏忽导致外层模型死活赋值失败,属性全为nil;因为第二个方法是忽略了所有属性(模型的所有属性都是ignore忽略的),第一个是所有属性为可选类型(模型的属性数目可以比接口数据字典的键数目多);



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值