JSONModel的模型嵌套 代碼:https://github.com/SunshineTraveller/JSONModelDemo 我們解析資料的時候會遇到嵌套的資料,解析的時候會用到嵌套的模型,下面說下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];
}