首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mantle与Sickbeard

使用Mantle与Sickbeard
EN

Stack Overflow用户
提问于 2014-06-17 12:01:41
回答 1查看 123关注 0票数 1

我试图用Mantle将Sickbeard的响应映射到我的对象,但我不知道如何映射,因为响应是基于键值的,使用TVDB id作为键,如下所示:

代码语言:javascript
复制
"data": {
    "71663": {
        "air_by_date": 0, 
        "cache": {
            "banner": 1, 
            "poster": 1
        }, 
        "language": "en", 
        "network": "FOX", 
        "next_ep_airdate": "2014-09-28", 
        "paused": 0, 
        "quality": "Any", 
        "show_name": "The Simpsons", 
        "status": "Continuing", 
        "tvdbid": 71663, 
        "tvrage_id": 6190, 
        "tvrage_name": "The Simpsons"
    }, 
    "72227": {
        "air_by_date": 0, 
        "cache": {
            "banner": 1, 
            "poster": 1
        }, 
        "language": "en", 
        "network": "CBS", 
        "next_ep_airdate": "", 
        "paused": 0, 
        "quality": "Any", 
        "show_name": "Two and a Half Men", 
        "status": "Continuing", 
        "tvdbid": 72227, 
        "tvrage_id": 6454, 
        "tvrage_name": "Two and a Half Men"
    }
}

由于data对象不只是包含像这个[{"key": value},{"key": value}]这样的对象数组,而是由一些惟一的id键控制的对象,所以我不确定应该如何将它映射到我的SBShow类中,定义如下:

代码语言:javascript
复制
#import <Foundation/Foundation.h>
#import <Mantle.h>

@interface SBShow : MTLModel <MTLJSONSerializing>

@property (nonatomic, strong) NSNumber *tvdbid;
@property (nonatomic, strong) NSString *showName;
@property (nonatomic, strong) NSString *network;
@property (nonatomic, strong) NSString *status;

@end

@implementation SBShow

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{@"showName": @"show_name"};
}

+ (NSValueTransformer *)dateJSONTransformer {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];

    return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *str) {
        return [formatter dateFromString:str];
    } reverseBlock:^(NSDate *date) {
        return [formatter stringFromDate:date];
    }];
}

@end

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 18:49:21

您可以这样做,方法是将键添加到“JSON字典”的其余部分:

代码语言:javascript
复制
NSMutableArray *shows = [NSMutableArray array];
// data is an NSDictionary, representing the 'data' key in the JSON
[data enumerateKeysAndObjectsUsingBlock:^(NSString *tvdbID, NSDictionary *showData, BOOL *stop) {
    NSMutableDictionary *modelDictionary = [showData mutableCopy];
    modelDictionary[@"tvdbid"] = tvdbID;
    NSError *error = nil;
    SBShow *show = [MTLJSONAdapter modelOfClass:SBShow.class 
                             fromJSONDictionary:modelDictionary 
                                          error:&error];
    [shows addObject:show];
}];

NSLog(@"Show models are %@", shows);

您可以编写自己的转换器来封装此逻辑,并在适当情况下将其应用于数据键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24263272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档