ios - Mantle如何将数组里面的几个元素映射到不同的属性上呢?
阿神
阿神 2017-04-17 14:59:09
0
2
299

现在我接收到的JSON是这样的

{
  "data" : [
    0.26,
    0.03,
    24.22,
    16.15,
    16.15
  ],
  "status" : true,
  "text" : ""
}

我需要用mantle将data里面的5个数组映射到model上的5个属性。比如这样:

@property(nonatomic,copy)NSNumber * firstNum;
@property(nonatomic,copy)NSNumber * secondNum;
@property(nonatomic,copy)NSNumber * thirdNum;
@property(nonatomic,copy)NSNumber * fourthnum;
@property(nonatomic,copy)NSNumber * fifthNum;
@property(nonatomic,copy)NSString * text;
@property(nonatomic)BOOL status;    

然后我在网上查到了这样一个方法

 + (NSValueTransformer *)pointListJSONTransformer
 {
     return [MTLValueTransformer transformerWithBlock:^id(NSArray *array) {
         return [array firstObject];
     }];
 }

这样可以将某个数组的的单个元素拿出来作为属性
但是我现在有多个,那到底应该怎么做呢

阿神
阿神

闭关修行中......

Antworte allen(2)
刘奇

你需要2个模型
.h 文件

@interface HLModelDataInfo : MTLModel<MTLJSONSerializing>
@property(nonatomic,copy)NSNumber * firstNum;
@property(nonatomic,copy)NSNumber * secondNum;
@property(nonatomic,copy)NSNumber * thirdNum;
@property(nonatomic,copy)NSNumber * fourthnum;
@property(nonatomic,copy)NSNumber * fifthNum;
@end

@interface HLModelData : MTLModel<MTLJSONSerializing>
@property (strong, nonatomic) HLModelData *data;
@property (assign, nonatomic) BOOL status;
@property (strong, nonatomic) NSString *text;
@end

.m文件中你除了实现协议外 再实现一个映射到数组的NSValueTransformer

+ (NSValueTransformer *)dataJSONTransformer{
    return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:HLModelDataInfo.class];
}

左手右手慢动作

首先感觉你这个json文件结构和你代码中的对象模型不匹配,要么是json文件结构错了,要么是代码的对象模型错了。json文件结构应该是和代码有清晰的对应关系的,像你给的这段代码中用array中的字段去匹配对象属性感觉不太妥当,建议修改文件结构,或者代码对象模型。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage