web-dev-qa-db-fra.com

Comment spécifier un type d'objet enfant dans un NSArray avec Mantle

Si j'ai un dictionnaire comme

{
  name: "Bob",
  cars: [
    { make: "ford", year: "1972" },
    { make: "mazda", year: "2000" }
  ],
}

et deux modèles comme:

@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

Comment utiliser Mantle pour que CarModels fasse partie de ma gamme de voitures de mon modèle personnel?

27
Mr Rogers

Ah l'a compris. J'avais besoin d'ajouter une méthode privée:

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

et assurez-vous que j'ai utilisé:

[PersonModel modelWithExternalRepresentation:dict];
20
Mr Rogers

+[NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:] est obsolète. La nouvelle API est +[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:].

Après avoir basculé vers la nouvelle API, les modèles peuvent être initialisés avec les initialiseurs par défaut fournis, par exemple, MTLJSONAdapter.

13
mbinna

Une note sur:

[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];

Cette méthode semble maintenant être obsolète. J'utilise cette nouvelle méthode dans mon code et cela semble bien fonctionner:

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

En savoir plus ici

4
onmyway133
+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]

Cette méthode est obsolète. La nouvelle méthode est:

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