2012-01-12 43 views
5

Đối với ứng dụng iOS tôi đang làm việc với RestKit, tôi cần phân tích cú pháp dấu thời gian thay đổi = "1325470840" thành NSDate. Tôi biết rằng tôi có thể làm điều này theo cách thủ công vớiPhân tích cú pháp dấu thời gian với RestKit trong iOS

[NSDate dateWithTimeIntervalSince1970:1325470840] 

Nhưng tôi đang sử dụng RestKits tích hợp dữ liệu lõi và điều này được xử lý hậu trường bằng cách sử dụng định dạng ngày, chẳng hạn như bên dưới.

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

Có ai biết cách tạo trình định dạng ngày để phân tích cú pháp dấu thời gian không? Hoặc làm thế nào tôi có thể đi về phân tích cú pháp này với RestKit?

+2

Tôi phát hiện ra sự cố, hóa ra máy chủ trả về dấu thời gian dưới dạng chuỗi chứ không phải số. Tôi sẽ đăng giải pháp của mình ngay sau khi tôi có thể làm như vậy (tôi phải đợi 8 giờ vì có ít hơn 100 danh tiếng) – xizor

Trả lời

3

Vâng, tôi đã tìm thấy sự cố của mình. RestKit đã sửa lỗi này trong vấn đề # 141, nhưng máy chủ mà tôi đang liên lạc trả về một chuỗi thay vì số dự kiến ​​để trình phân tích cú pháp tự động không biết phải làm gì với nó. Tôi đã tạo một yêu cầu để thêm trình phân tích cú pháp NSString> NSNumber> NSDate vào RestKit (# 503). Trong thời gian chờ đợi, tôi cập nhật chuỗi theo cách thủ công thành một số như được hiển thị bên dưới trước khi phân tích cú pháp thực tế xảy ra.

- (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; 
} 
Các vấn đề liên quan