如何使用地幔在NSArray中指定子对象types

如果我有一本像这样的字典

{ 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 

我如何使用地幔使我的人模型中的汽车数组是CarModel?

啊找出来了。 我需要添加一个私有方法:

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

并确保我使用:

 [PersonModel modelWithExternalRepresentation:dict]; 

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

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

关于:

 [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class]; 

这种方法似乎现在已经被弃用了。 我在我的代码中使用这个新的方法,它似乎工作得很好:

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

在这里阅读更多

 +[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:] 

此方法已弃用。 新的方法是:

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