web-dev-qa-db-ja.com

Mantleを使用してNSArrayで子オブジェクトタイプを指定する方法

私が次のような辞書を持っている場合

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

そして次のような2つのモデル:

@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になるように、Mantleを使用するにはどうすればよいですか?

27
Mr Rogers

ああ、それを理解しました。プライベートメソッドを追加する必要がありました:

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

そして私が使用したことを確認してください:

[PersonModel modelWithExternalRepresentation:dict];
20
Mr Rogers

+[NSValueTransformer mtl_externalRepresentationArrayTransformerWithModelClass:]は非推奨です。新しいAPIは+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]

新しいAPIに切り替えた後、モデルは、たとえばMTLJSONAdapterによって提供されるデフォルトの初期化子で初期化できます。

13
mbinna

に関する注記:

[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:CarModel.class];

このメソッドは現在非推奨のようです。コードでこの新しいメソッドを使用していますが、正常に機能しているようです。

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

続きを読む ここ

4
onmyway133
+[NSValueTransformer mtl_JSONArrayTransformerWithModelClass:]

このメソッドは非推奨です。新しい方法は次のとおりです。

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