3

私に与えられたのは、次の JSON 応答であるとしましょう

{
    "images": [
        "http://domain.com/image1.jpg",
        "http://domain.com/image2.jpg",
        "http://domain.com/image3.jpg"
    ]
}

Mantle を使用して、これらの文字列を解析して NSURL に変換し、NSArray に保持したいと考えています。

私のObjective-Cモデルオブジェクトは次のようになります

@interface MyModel : MTLModel <MTLJSONSerializing>
// Contains NSURLs, no NSStrings
@property (nonatomic, copy, readonly) NSArray *images;
@end

それを達成するエレガントな方法はありますか?いくつかの NSURL 配列トランスフォーマー?

+ (NSValueTransformer*)imagesJSONTransformer
{
    return [NSValueTransformer mtl_JSONArrayTransformerWithModelClass:[NSURL class]];
}

明らかに NSURL は MTLModel から派生していないため、機能しません。

4

1 に答える 1

2

残念ながら、Mantle 1.x には既存のトランスフォーマー (この場合は MTLURLValueTransformerName という名前のトランスフォーマー) を配列の各要素に適用する簡単な方法がありません。

次のように実行できます。

+ (NSValueTransformer*)imagesJSONTransformer {
    NSValueTransformer *transformer = [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
    return [MTLValueTransformer transformerWithBlock: ^NSArray *(NSArray *values) {
        NSMutableArray *transformedValues = [NSMutableArray arrayWithCapacity:values.count];
        for (NSString *value in values) {
            id transformedValue = [transformer transformedValue:value];
            if (transformedValue) {
                [transformedValues addObject:transformedValue];
            }
        }
        return transformedValues;
    }];
}

Mantle 2.0 では、定義済みの配列マッピング トランスフォーマーを使用できるようになります。Mantle 2.0 はまだ開発中です。

于 2014-04-24T13:34:42.543 に答える