簡體   English   中英

在iOS中使用Mantle將帶有時間戳的NSArray映射到NSDate對象

[英]Map NSArray with timestamps to NSDate objects with Mantle in iOS

例如,我有一個帶有屬性的MTLModel子類Order

 @property (nonatomic, copy) NSArray *dates;
 @property (nonatomic, strong) NSDate *dateFrom;
 @property (nonatomic, strong) NSDate *dateTo;

來自服務器的JSON看起來像:

 order =     {
    dates =         (
        1422784800,
        1422784843
    );
}

+ (NSValueTransformer *)datesJSONTransformer mb是否可能以某種方式將JSON中的這兩個時間戳轉換為NSDate對象? (dateTo,dateFrom類的pr-s)

Mantle 1.x並不提供將JSON中的字段映射到多個模型屬性的簡便方法。 給定以下模型實現,這應該可以工作:

NSDictionary *JSONDictionary = @{
    @"dates" :  @[ @1422784800, @1422784843 ]
};
NSError *error = nil;
Order *order = [MTLJSONAdapter modelOfClass:Order.class fromJSONDictionary:JSONDictionary error:&error];
NSLog(@"Order is from %@ to %@", order.dateFrom, order.dateTo);

訂單執行:

@implementation Order

- (NSDate *)dateFrom
{
    if ([self.dates count] > 0) {
        return self.dates[0];
    }
    return nil;
}

- (NSDate *)dateTo
{
    if ([self.dates count] > 1) {
        return self.dates[1];
    }
    return nil;
}

#pragma mark - MTLJSONSerializing

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

+ (NSValueTransformer *)datesJSONTransformer
{
    return [MTLValueTransformer transformerWithBlock:^NSArray *(NSArray *dates) {
        if (![dates isKindOfClass:NSArray.class]) {
            return nil;
        }
        NSMutableArray *dateObjects = [NSMutableArray arrayWithCapacity:dates.count];
        for (NSNumber *timestamp in dates) {
            NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timestamp doubleValue]];
            [dateObjects addObject:date];
        }
        return [dateObjects copy];
    }];
}

@end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM