2013-07-30 56 views
0

假设我有此JSON:映射的NSDate的一个NSArray与RKObjectMapping

{ "arrayOfDates" : [ "7-28-2013", "7-29-2013", "7-30-2013"]} 

而我的目标是:

@interface MyObject : NSObject 

@property (nonatomic, retain) NSArray* dates; 

@end 

我试图用日期的arrayOfDates映射。

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[MyObject class]]; 
[mapping addAttributeMappingsFromDictionary:@{@"arrayOfDates" : @"dates"}]; 
NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setDateFormat:@"MM-dd-yyyy"]; 
mapping.preferredDateFormatter = dateFormatter; 

映射结果是一个NSString数组! 这是一种获取NSDate而不是NSString数组的方法吗?

回答

1

你不能得到RestKit来做到这一点。相反,在RestKit调用的完成块中遍历dates,然后使用格式化程序转换字符串,然后更新dates

如果目标属性是NSDate,RestKit通常会将该字符串转换为日期,但在您的情况下,它是一个数组,因此RestKit不知道它应该被转换。

+0

谢谢你Wain!这可能是RestKit的一项新功能! –

+0

随意实施它,并发送一个拉请求或在RestKit谷歌组上提出项目:-) – Wain

0

我遇到了这个答案试图解决类似的问题。我找到了一种方法让RestKit使用自定义RKValueTransformer来完成此操作。

RKObjectMapping* objectMapping = [RKObjectMapping mappingForClass:[MyObjectWithAnNSArrayProperty class]]; 

    RKAttributeMapping* datesAttributeMapping = [RKAttributeMapping attributeMappingFromKeyPath:@"arrayOfDates" toKeyPath:NSStringFromSelector(@selector(myArrayOfDates))]; 
    datesAttributeMapping.valueTransformer = [RKBlockValueTransformer 
    valueTransformerWithValidationBlock:^BOOL(__unsafe_unretained Class sourceClass, __unsafe_unretained Class destinationClass) 
    { 
     // We transform a `NSArray` into another `NSArray` 
     return ([sourceClass isSubclassOfClass:[NSArray class]] && 
       [destinationClass isSubclassOfClass:[NSArray class]]); 
    } 
    transformationBlock:^BOOL(id inputValue, __autoreleasing id *outputValue, Class outputValueClass, NSError *__autoreleasing *error) 
    { 
     // Validate the input and output 
     RKValueTransformerTestInputValueIsKindOfClass(inputValue, [NSArray class], error); 
     RKValueTransformerTestOutputValueClassIsSubclassOfClass(outputValueClass, [NSArray class], error); 

     NSArray* inputValueArray = inputValue; 

     NSMutableArray* result = [[NSMutableArray alloc] initWithCapacity:inputValueArray.count]; 
     // Convert strings to dates 
     for (NSString* inputDate in inputValueArray) 
     { 
      [result addObject:RKDateFromString(inputDate)]; 
     } 
     // Get a non-mutable copy 
     *outputValue = [result copy]; 
     return YES; 
    }]; 
    [objectMapping addPropertyMapping:datesAttributeMapping]; 
相关问题