Переформатирование атрибутов 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"];
Надеюсь это поможет.