Подтвердить что ты не робот

Как указать тип дочерних объектов в 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?

4b9b3361

Ответ 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]];
    }