2012-01-12 16 views
5

Dla aplikacji na iOS, nad którą pracuję z pakietem RestKit, muszę przetworzyć uniksowy znacznik czasu zmieniony = "1325470840" na NSDate. Wiem, że mogę to zrobić ręcznie zParsing uniksowy znacznik czasu z RestKit w iOS

[NSDate dateWithTimeIntervalSince1970:1325470840] 

Ale używam RestKits integrację danych rdzenia i jest obsługiwane za kulisami za pomocą date formatek, takie jak poniżej.

[RKObjectMapping addDefaultDateFormatterForString:@"E MMM d HH:mm:ss Z y" inTimeZone:nil]; 

Czy ktoś wie, jak utworzyć narzędzie do formatowania daty, aby przeanalizować znacznik czasu unix? Albo w jaki sposób mogę przeanalizować to z RestKit?

+2

Znalazłem problem, okazuje się, że serwer zwraca znacznik czasu jako ciąg, a nie liczbę. Opublikuję moje rozwiązanie, gdy tylko będę mógł to zrobić (muszę poczekać 8 godzin, ponieważ ma mniej niż 100 punktów reputacji) – xizor

Odpowiedz

3

Cóż, znalazłem mój problem. RestKit naprawił to w numerze # 141, ale serwer, z którym się kontaktuję, zwraca ciąg zamiast spodziewanej liczby, więc automatyczny analizator składni nie wie, co z nim zrobić. Utworzono żądanie dodania parsera NSString> NSNumber> NSDate do pakietu RestKit (# 503). W międzyczasie ręcznie aktualizuję ciąg znaków do liczby pokazanej poniżej, zanim nastąpi faktyczne przetwarzanie.

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout id *)mappableData 
{ 
    NSArray *dateKeys = [NSArray arrayWithObjects:@"changed", nil]; 
    NSMutableArray *reformattedData = [NSMutableArray arrayWithCapacity:[*mappableData count]]; 

    for(id dict in [NSArray arrayWithArray:(NSArray*)*mappableData]) { 
     NSMutableDictionary* newDict = [dict mutableCopy]; 
     for(NSString *dateKey in dateKeys) { 
      NSNumber *num = [NSNumber numberWithInt:[[newDict valueForKey:dateKey] intValue]]; 
      [newDict setValue:num forKey:dateKey]; 
     } 
     [reformattedData addObject:newDict]; 
    } 
    *mappableData = reformattedData; 
}