Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用Mantle将JSON数组中的NSString转换为NSURL_Objective C_Github Mantle - Fatal编程技术网

Objective c 使用Mantle将JSON数组中的NSString转换为NSURL

Objective c 使用Mantle将JSON数组中的NSString转换为NSURL,objective-c,github-mantle,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 MyMode

假设给我的是以下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不是从MTLModel派生出来的,因此这将不起作用。

不幸的是,Mantle 1.x没有一种简单的方法将现有的转换器(在本例中,名为MTLURLVALUE TransformerName的转换器)应用于数组的每个元素

您可以这样做:

+ (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仍在开发中。

谢谢@davidcarun,这是可行的。期待Mantle 2.x!
+ (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;
    }];
}