如何使用 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
如何构建RKMapping
或RKValueTransformer
将其映射到NSDate
对象?
【问题讨论】:
NSDateComponents 和 NSCalendar。 我对@987654325@ 和NSCalendar
都很熟悉。但是,我的问题是如何在 Restkit 中设置 RKMapping
或 RKValueTransformer
。
您是否尝试过为NSDictionary
到NSDate
创建一个价值转换器?或者使用具有 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.1 将本地 JSON 映射到 Core Data 崩溃
如何在 Objective C 中使用 RestKit 将纬度和经度字段映射到单个 CLLocationCoordinate2D?