Как я могу сохранить объекты JSON в Core Data? - PullRequest
3 голосов
/ 21 февраля 2012

Я новичок в базовых данных, я разработал приложение на основе навигации, и некоторые из данных, которые я использую, создаются во время выполнения (приходят с URL через JSON).Я изучил несколько учебных пособий, которые искали почти сутки, но до сих пор не понял, как сохранить входящие данные JSON в сущность (или событие?) В моей модели базовых данных.Я получаю данные в классе DetailViewController и мне нужно сохранить эти данные в Core Data (я подготовил объект с 7 свойствами).Кто-нибудь может помочь? (Если вы знаете хороший учебник или пример кода, я буду рад)

РЕДАКТИРОВАТЬ Это может быть немного конкретным, но у меня действительно есть проблемы и мне нужно немногоПомогите.Мои данные поступают в приложение с некоего спокойного сервера (я написал его на PHP), сначала пользователь вводит свою регистрационную информацию (которую я ранее сохранял в базе данных на сервере), а когда приходят данные ответа, я буду использовать разныеего элементы в разных представлениях (например, user_id будет использоваться в представлении и buttonData и т. д. в других представлениях).Мой вопрос, как я буду сохранять данные JSON в моей основной модели данных (на данный момент имеет дерево сущностей).Заранее спасибо

Примечание: я очень любил, но не смог найти ответ и учебник о приложении, подобном моему

Ответы [ 4 ]

11 голосов
/ 21 февраля 2012

Лучший способ сделать это - создать объекты, соответствующие структуре JSON. Проще всего было, когда каждый объект JSON становится сущностью, а массивы становятся массивами сущностей. Однако будьте разумны и не вводите слишком много избыточного для подобъектов JSON, которые по существу являются частью его суперобъекта.

Когда вы создали сущности, вы можете начать с разбора и перевода. Используйте некоторую инфраструктуру JSON (начиная с iOS5, там есть Apple) и проанализируйте строку JSON в дереве объектов, где корневым элементом является NSArray или NSDictionary, а подэлементами будут NSArray, NSDictionary, NSNumber, NSString или NSNull.

Перебирайте их один за другим в итерационных циклах и присваивайте соответствующие значения вашим основным атрибутам сущности данных. Вы можете использовать NSKeyValueCoding здесь и избежать слишком большого ручного отображения имен атрибутов. Если ваши атрибуты JSON имеют то же имя, что и атрибуты сущностей, вы сможете просто просмотреть все элементы словаря и разобрать их в атрибуты с тем же именем.

Пример

Мой код синтаксического анализа в аналогичной ситуации был следующим:

NSDictionary *parsedFeed = /* your way to get a dictionary */;
for (NSString *key in parsedFeed) {
    id value = [parsedFeed objectForKey:key];
    // Don't assign NSNull, it will break assignments to NSString, etc.
    if (value && [value isKindOfClass:[NSNull class]])
         value = nil;

    @try {
        [yourCreatedEntity setValue:value forKey:property];
    } @catch (NSException *exception) {
        // Exception means such attribute is not defined in the class or some other error.
    }
}

Этот код будет работать в тривиальной ситуации, однако может потребоваться его расширение в зависимости от ваших потребностей:

  • С некоторыми видами пользовательских сопоставлений на случай, если вы хотите, чтобы ваше значение JSON было помещено в атрибут с другим именем.
  • Если в вашем JSON есть подобъекты или массивы подобъектов, вам нужно будет обнаружить эти случаи, например, в установщиках, и инициировать новый анализ на один уровень глубже. В противном случае с моим примером вы столкнетесь с ситуацией, когда объект NSDictionary назначается объекту NSManagedObject.

Я не думаю, что было бы разумно углубляться в эти, более сложные вопросы, связанные с этим ответом, поскольку это слишком расширит его.

2 голосов
/ 08 сентября 2015

Эта библиотека мне очень помогает

Features
  • Отображение атрибутов и отношений в ключах JSON.

  • Преобразование значения с использованием именованных объектов NSValueTransformer.

  • Сохранение графа объектов.

  • Поддержка наследования сущностей

  • Работает наоборот

1 голос
/ 22 февраля 2012

Я предлагаю вам использовать эту библиотеку: https://github.com/TouchCode/TouchJSON И затем, если вы хотите создать фабрику для анализа json и подачи данных кода, вы можете использовать селекторы для вызова методов, чтобы заполнить все ваши атрибуты.

0 голосов
/ 21 февраля 2012

Скорее всего, ваши данные JSON будут преобразованы в NSDictionary или NSArray (или некоторую комбинацию двух).Просто извлеките ключ / значения из структуры JSON и добавьте их в свой класс сущностей.

...