Все данные по моему приложению выжиты API через JSON. Природа хорошего процента этих данных - то, что они не изменяются очень часто. Таким образом, чтобы пойти и выполнить запросы JSON для получения списка данных, которые не изменяются, много не казалось всем тем обращением.
Я ищу самую разумную опцию сохранить этот JSON на iPhone в своего рода персистентном хранилище данных. Очевидно, один плюс сохранения данных должен был бы обеспечить его, когда телефон не может получить доступ к API.
Я посмотрел некоторыена примеры наличия JSON, и CoreData взаимодействуют, например, но кажется, что они только описывают преобразование NSManagedObjects в JSON. Если бы я могу преобразовать JSON в CoreData, моей единственной проблемой была бы способность изменить те данные, когда данные из API действительно изменяются.
(Или, возможно, это все просто глупо.)
Для концептуального чтения вы можете прочитать документацию о Эффективный импорт данных , особенно «Найди или создай». См. Предыдущий аналогичный вопрос.
Получение JSON и сохранение его как Core Data локально весьма разумно. Как я это делаю, состоит из двух этапов:
Две хорошие структуры для преобразования между JSON и NS *: json-framework и TouchJSON . Приведенный ниже пример основан на json-framework.
Допустим, вы получили массив некоторых объектов из JSON. Затем вы должны сделать:
NSArray *objects = [jsonStringYouGotFromServer JSONValue];
for (NSDictionary *_object in objects) {
CDObjectType *cdObject = [self cdObjectFromDictionary:_object];
// cdObject is now a full-featured Core Data object
}
cdObjectFromDictionary может выглядеть примерно так:
- (CDObjectType *) cdObjectFromDictionary:(NSDictionary *)dict {
CDObjectType *object = [NSEntityDescription
insertNewObjectForEntityForName:@"Object"
inManagedObjectContext:moc];
NSDictionary *attributes = [[NSEntityDescription
entityForName:@"Object"
inManagedObjectContext:moc] attributesByName];
for (NSString *attr in attributes) {
[object setValue:[dict valueForKey:attr] forKey:attr];
}
return object;
}
Выше предполагается, что имена атрибутов в вашей модели JSON и Core Data совпадают и что типы данных совпадают (т.е. номера JSON являются Core Data Номера NS и т. Д.). Приведенный выше код отлично работает даже при изменении модели.
В приведенном выше коде не рассматривается, как проверить, существует ли объект локально, но вы можете представить, как это добавить. У вас должен быть идентификатор объекта некоторой формы в вашей модели, и вы можете увидеть, существует ли объект локально, прежде чем добавлять его, или необходимо ли обновить существующий объект.