使用 Mantle 在 JSON 数组中将 NSString 转换为 NSURL
Posted
技术标签:
【中文标题】使用 Mantle 在 JSON 数组中将 NSString 转换为 NSURL【英文标题】:Transform NSString to NSURL within a JSON Array with Mantle 【发布时间】: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 派生的,所以这不起作用。
【问题讨论】:
【参考方案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!以上是关于使用 Mantle 在 JSON 数组中将 NSString 转换为 NSURL的主要内容,如果未能解决你的问题,请参考以下文章
iOS Mantle Overcoat 实体 ID 映射数组
Mantle:解析 JSON 时未捕获的异常“NSInvalidArgumentException”