如何使用 RestKit 将日期组件字典映射到 NSDate

Posted

技术标签:

【中文标题】如何使用 RestKit 将日期组件字典映射到 NSDate【英文标题】:How to map a dictionary of date components to a NSDate using RestKit 【发布时间】:2014-11-18 02:24:04 【问题描述】:

我正在使用 RestKit 来处理我的所有 JSON 响应。其中一个对象是日期,但它不是使用标准格式,而是具有像这样的日、月和年参数的对象...


  "date": 
    "day": 30,
    "month": 7,
    "year": 2014
  

如何构建RKMappingRKValueTransformer 将其映射到NSDate 对象?

【问题讨论】:

NSDateComponents 和 NSCalendar。 我对@9​​87654325@ 和NSCalendar 都很熟悉。但是,我的问题是如何在 Restkit 中设置 RKMappingRKValueTransformer 您是否尝试过为NSDictionaryNSDate 创建一个价值转换器?或者使用具有 NSDate 访问器方法的自定义对象... 问题是我不知道如何创建一个可以做到这一点的 RKValueTransformer。不过我想通了。 【参考方案1】:

这是我最终使用的。

RKValueTransformer *dateTransformer = [RKBlockValueTransformer valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class sourceClass, __unsafe_unretained Class destinationClass) 
    return ([sourceClass isSubclassOfClass:[NSDictionary class]] && [destinationClass isSubclassOfClass:[NSDate class]]);
 transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, Class outputValueClass, NSError *__autoreleasing *error) 
    RKValueTransformerTestInputValueIsKindOfClass(inputValue, [NSDictionary class], error);
    RKValueTransformerTestOutputValueClassIsSubclassOfClass(outputValueClass, [NSDate class], error);
        NSDateComponents *dc = [[NSDateComponents alloc] init];
    dc.day = [inputValue[@"day"] integerValue];
    dc.month = [inputValue[@"month"] integerValue];
    dc.year = [inputValue[@"year"] integerValue];
    dc.calendar = [NSCalendar currentCalendar]; // This step is easy to forget.
    NSDate *aDate = dc.date;
    *outputValue = aDate;

    return YES;
];

要实际使用这个转换器...

[[RKValueTransformer defaultValueTransformer] addValueTransformer:dateTransformer];

【讨论】:

以上是关于如何使用 RestKit 将日期组件字典映射到 NSDate的主要内容,如果未能解决你的问题,请参考以下文章

使用 RestKit 0.20 对集合进行自定义请求映射

RestKit 0.20.1 将本地 JSON 映射到 Core Data 崩溃

映射后向 RestKit 映射结果字典添加值

RestKit:你如何映射到 NSUUID?

如何在 Objective C 中使用 RestKit 将纬度和经度字段映射到单个 CLLocationCoordinate2D?

使用 RESTKit 映射 iTunes 搜索 API 结果