Переформатирование атрибутов JSON при использовании Core Data и AFIncrementalStore

У меня есть iOS-приложение, очень похожее на то, которое было создано здесь: https://devcenter.heroku.com/articles/ios-core-data-buildpack-app то есть Core Data и AFIncrementalStore, но с пользовательским сервером Rails 3.1, который обслуживает JSON.

У меня есть две проблемы похожего характера:

  • У Rails есть атрибут с именем id, но это зарезервированное слово в Objective-C, поэтому я хотел бы переименовать его в activityId или аналогичный в приложении iOS. Где в коде я должен выполнить это id -> activityId перевод?
  • Все мои поля даты в настоящее время отображаются как (null) в приложении iOS, которое, как я подозреваю, связано с способом форматирования дат в Rails (например, "2012-09-14T11:32:09+02:00"). Где в коде iOS я должен добавить свой собственный анализатор даты?

Я хотел бы избежать пользовательской генерации JSON на стороне сервера, если это возможно.

Спасибо!

1 ответ

Решение

Следуя " Основному примеру" из Github в AFIncrementalStore, я сопоставил атрибуты Rails с Core Data в attributesForRepresentation:ofEntity:fromResponse:

- (NSDictionary *)attributesForRepresentation:(NSDictionary *)representation
                                     ofEntity:(NSEntityDescription *)entity
                                 fromResponse:(NSHTTPURLResponse *)response 
{
    NSMutableDictionary *mutablePropertyValues = [[super attributesForRepresentation:representation ofEntity:entity fromResponse:response] mutableCopy];
    if ([entity.name isEqualToString:@"Activity"]) {
        [mutablePropertyValues setValue:[NSNumber numberWithInteger:[[representation valueForKey:@"id"] integerValue]] forKey:@"activityID"];
    }

    return mutablePropertyValues;
}

Тем не менее, я пошел по этому пути и позже узнал, что в этом нет необходимости, потому что АДИС хранит это для вас. Смотрите эту колоду в разделе "Модель дополненных управляемых объектов". Этот подкаст подробно рассказывает об этом.

Что касается преобразования даты, то оно выполняется тем же способом, что и в примере с " клиентом Twitter":

[mutablePropertyValues setValue:[[NSValueTransformer valueTransformerForName:TTTISO8601DateTransformerName] reverseTransformedValue:[representation valueForKey:@"created_at"]] forKey:@"createdAt"];

Надеюсь это поможет.

Другие вопросы по тегам