【问题标题】:Transform NSString to NSURL within a JSON Array with Mantle使用 Mantle 在 JSON 数组中将 NSString 转换为 NSURL
【发布时间】:2014-04-24 11:52:23
【问题描述】:

假设给我的是以下 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 派生的,所以这不起作用。

【问题讨论】:

    标签: objective-c github-mantle


    【解决方案1】:

    不幸的是,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 仍在开发中。

    【讨论】:

    • 感谢@DavidCaunt,这行得通。期待 Mantle 2.x!
    猜你喜欢
    • 2011-12-26
    • 2012-02-10
    • 1970-01-01
    • 2012-04-05
    • 2016-04-07
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多