Как указать тип дочерних объектов в NSArray с мантией
Если у меня есть словарь, например
{
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?
Ответы
Ответ 1
Ах понял это. Мне нужно было добавить частный метод:
+ (NSValueTransformer *)carsTransformer
{
return [NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:[CarModel class]];
}
и убедитесь, что я использовал:
[PersonModel modelWithExternalRepresentation:dict];
Ответ 2
+[NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:]
устарел. Новый API - +[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]
.
После переключения на новый API модели могут быть инициализированы инициализаторами по умолчанию, предоставленными, например, MTLJSONAdapter
.
Ответ 3
Примечание:
[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];
Теперь эти методы устаревают. Я использую этот новый метод в своем коде, и он работает нормально:
[MTLJSONAdapter arrayTransformerWithModelClass:CarModel.class];
Ответ 4
+ (NSValueTransformer *)carsJSONTransformer {
return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];
}
Подробнее здесь
Ответ 5
+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]
Этот метод устарел. Новый метод:
+ (NSValueTransformer *)carsTransformer
{
return [MTLJSONAdapter arrayTransformerWithModelClass:[CarsModel class]];
}