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

Mr *_*ers 27 frameworks ios github-mantle

如果我有一本字典

{
  name: "Bob",
  cars: [
    { make: "ford", year: "1972" },
    { make: "mazda", year: "2000" }
  ],
}
Run Code Online (Sandbox Code Playgroud)

和两个模型,如:

@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
Run Code Online (Sandbox Code Playgroud)

我如何使用Mantle以便我的人模型中的汽车阵列是CarModels?

Mr *_*ers 20

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

+ (NSValueTransformer *)carsTransformer
{
    return [NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:[CarModel class]];
}
Run Code Online (Sandbox Code Playgroud)

并确保我使用:

[PersonModel modelWithExternalRepresentation:dict];
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用此方法,新方法是:[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:[CarModel class]]; (6认同)
  • 现在你必须使用[MTLJSONAdapter arrayTransformerWithModelClass:[CarModel class]]; (3认同)

mbi*_*nna 13

+[NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:]已弃用.新的API是+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:].

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

  • 现在不推荐使用这两个版本,请参阅http://stackoverflow.com/a/30735107/1652402 (2认同)

Bri*_*tta 12

关于的说明:

[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];
Run Code Online (Sandbox Code Playgroud)

现在似乎不推荐使用这种方法.我在我的代码中使用这种新方法,它看起来工作得很好:

[MTLJSONAdapter arrayTransformerWithModelClass:CarModel.class];
Run Code Online (Sandbox Code Playgroud)