Mantle如何将数组里面的几个元素映射到不同的属性上呢?


现在我接收到的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];
     }];
 }

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

ios mantle objective-c

梨花酱的胖次 9 years, 7 months ago

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

faulty answered 9 years, 7 months ago

你需要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];
}

skfool answered 9 years, 7 months ago

Your Answer