如何在带有Mantle的NSArray中指定子对象类型

时间:2012-12-14 17:41:26

标签: ios frameworks github-mantle

如果我有像

这样的词典
{
  name: "Bob",
  cars: [
    { make: "ford", year: "1972" },
    { make: "mazda", year: "2000" }
  ],
}

和两个模型如:

@interface CarModel : MTLModel

@property (nonatomic, strong) NSString *make;
@property (nonatomic, strong) NSString *year;

@end

@interface PersonModel : MTLModel

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSArray *cars;

@end

我如何使用地幔这样我个人模型中的汽车阵列是CarModels?

5 个答案:

答案 0 :(得分:20)

啊想通了。我需要添加一个私有方法:

+ (NSValueTransformer *)carsTransformer
{
    return [NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:[CarModel class]];
}

并确保我使用了:

[PersonModel modelWithExternalRepresentation:dict];

答案 1 :(得分:13)

+[NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:]已弃用。新API为+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]

切换到新API后,可以使用例如MTLJSONAdapter提供的默认初始化程序初始化模型。

答案 2 :(得分:12)

关于:

的说明
[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];

现在似乎不推荐使用此方法。我在我的代码中使用了这种新方法,它似乎工作得很好:

[MTLJSONAdapter arrayTransformerWithModelClass:CarModel.class];

答案 3 :(得分:4)

+ (NSValueTransformer *)carsJSONTransformer {
    return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];
}

了解更多here

答案 4 :(得分:0)

+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]

不推荐使用此方法。新方法是:

  + (NSValueTransformer *)carsTransformer
    {
        return [MTLJSONAdapter arrayTransformerWithModelClass:[CarsModel class]];
    }