Objective c 使用Mantle将JSON数组中的NSString转换为NSURL
假设给我的是以下JSON响应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
{
"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;
}];
}