使用Mantle将NSString转换为带有MSON的JSON数组中的NSURL

时间:2014-04-24 11:52:24

标签: objective-c github-mantle

让我们说给我的是以下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派生的,因此不起作用。

1 个答案:

答案 0 :(得分: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中,您将能够使用predefined array mapping transformer。 Mantle 2.0仍在开发中。