Cómo especificar tipos de objetos secundarios en una NSArray con Mantle
frameworks github-mantle (5)
Si tengo un diccionario como
{
name: "Bob",
cars: [
{ make: "ford", year: "1972" },
{ make: "mazda", year: "2000" }
],
}
y dos modelos como:
@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
¿Cómo uso Mantle para que mi variedad de autos en mi modelo personal sean CarModels?
Ah lo descubrí. Necesitaba agregar un método privado:
+ (NSValueTransformer *)carsTransformer
{
return [NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:[CarModel class]];
}
y asegúrate de que usé:
[PersonModel modelWithExternalRepresentation:dict];
Una nota sobre:
[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];
Este método parece estar ahora en desuso. Estoy usando este nuevo método en mi código y parece estar funcionando bien:
[MTLJSONAdapter arrayTransformerWithModelClass:CarModel.class];
+[NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:]
está en desuso. La nueva API es +[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]
.
Después de cambiar a la nueva API, los modelos se pueden inicializar con los inicializadores predeterminados proporcionados por, por ejemplo, MTLJSONAdapter
.
+ (NSValueTransformer *)carsJSONTransformer {
return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];
}
Lea más here
+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]
Este método está en desuso. El nuevo método es:
+ (NSValueTransformer *)carsTransformer
{
return [MTLJSONAdapter arrayTransformerWithModelClass:[CarsModel class]];
}