2017-01-08 3 views
0

У меня есть JSON, возвращаемый REST API, в мое уже существующее приложение, которое я пытаюсь исправить. Я довольно новый для Objective C.Вставьте массив JSON в объекты Core Data

[ 
{ 
"Activities":" 
     [ 
      { 
      "activityid":845, 
      "activityname":"Registration and networking breakfast", 
      "actvitydesc":"Registration and networking breakfast", 

      }, 
      { 
      "activityid":846, 
      "activityname":"Plenary session: The Workforce Tsunami", 
      "actvitydesc":"It's Time to Rethink Talent 

      } 
} 
] 

Существует сущность Activity основных данных в моем приложении, которое содержит следующие атрибуты Activityidactivitynameactivitydesc

Как я могу вставить данные в формате JSON внутри мои основных данных организация? Нужно ли создавать класс модели для этого? Могу ли я вставлять данные json непосредственно в основные данные без создания объектов модели?

+0

ли вы решить эту проблему? – Gulliva

+0

Код, который вы дали, должен был немного измениться, но он сработал. Спасибо –

ответ

1

Если у вас уже есть объект, называемый Activity, вы можете использовать класс NSManagedObject для установки значения для атрибута. Попробуйте

NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Activity" inManagedObjectContext:_managedObjectContext]; 

[managedObject setValue:[NSNumber numberWithInteger:4711] forKey:@"activityid"]; 

и так далее ... Вы также можете создать класс от Classgenerator из CoreData в XCode 8 существует несколько способов. По умолчанию класс генерируется автоматически с XCode 8. Если вам это не нравится, вы можете отключить его и сгенерировать класс вручную. Просто зайдите в модель CoreData -> Editor -> Create NSManagedObject Subclass. Обратите внимание, что вы должны деактивировать генерацию автоматического кода раньше. Если вы этого не сделаете, вы станете ошибками при создании проекта. Если имя JSON атрибута равно имя CoreData атрибута вы можете также цикл по словарю, как это:

NSArray *wrapper = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil]; 
for(NSDictionary *dict in wrapper){ 
    NSArray *activities = [dict objectForKey:@"Activities"]; 
    for(NSDictionary *activity in activities){ 
     NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Activity" inManagedObjectContext:_managedObjectContext]; 

     // [managedObject setValue:[NSNumber numberWithInteger:4711] forKey:@"activityid"]; 
     for(NSString *attributeName in activity) 
      [managedObject setValue:[activity objectForKey:attributeName] forKey:attributeName]; 

    } 
} 

Надежда, что помогает вам ...

+0

Но вопрос в том, как я могу хранить массив действий внутри объекта Activity.? Как мне это сделать? Я могу это сделать? –

+0

Вопрос: почему вы хотите сохранить этот массив внутри объекта активности? То, как я показал вам, создает новую запись в таблице действий для вас. Таким образом, каждая запись в jsonarray становится собственной записью в таблице активности основных данных. Если вы хотите хранить массивы в основном объекте данных, вам нужно выбрать трансформируемое в качестве типа атрибута вашего основного атрибута данных. Но я думаю, что это не то, что вы хотите. – Gulliva

+0

Был ли мой ответ полезным для вас? – Gulliva

0

Чтобы вставить что-либо в основные данные, вам необходимо сгенерировать модели. Создайте редактор модели основных данных (если у вас его нет) и добавьте объекты. В Интернете есть много учебников, как это сделать.