2013-08-13 2 views
0

Мне удалось предварительно заполнить базовую модель данных, состоящую из одного объекта со многими атрибутами через файл JSON.JSON to Core Data Pre Заполнение дополнительных объектов

Затем я добавил вторую сущность и столкнулся с проблемами при заполнении этой сущности одним и тем же файлом JSON. Поэтому я думал, что создам другой файл JSON для предварительного заполнения второго объекта, но это, похоже, не работает.

код ниже, что ив пытался использовать:

//Below is the code for the first entity 

    NSString* dataPath = [[NSBundle mainBundle] pathForResource:@"Exercises" ofType:@"json"]; 
    NSArray* Exercises = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath] 
                 options:kNilOptions 
                  error:&err]; 
    NSLog(@"Imported Exercises: %@", Exercises); 

    [Exercises enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

     Exercise *exercise = [NSEntityDescription 
           insertNewObjectForEntityForName:@"Exercise" 
           inManagedObjectContext:context]; 
     exercise.tag = [obj objectForKey:@"tag"]; 
     exercise.name = [obj objectForKey:@"name"]; 
     exercise.type = [obj objectForKey:@"type"];  
     NSError *error; 
     if (![context save:&error]) { 
      NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
     } 
    }]; 







//Below is the code for the second Entity 


    dataPath = [[NSBundle mainBundle] pathForResource:@"Weights" ofType:@"json"]; 



    //Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil' 
    NSArray* Weights = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath] 
                 options:kNilOptions 
                  error:&err]; 
    NSLog(@"Imported Weights: %@", Weights); 

    [Weights enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

     Weight *weight = [NSEntityDescription 
         insertNewObjectForEntityForName:@"Weight" 
         inManagedObjectContext:context]; 
     weight.weight = [obj objectForKey:@"weightEntry"]; 

     NSError *error; 
     if (![context save:&error]) { 
      NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]); 
     } 
    }]; 

Был бы признателен за любую помощь. Thank you

+3

В Каким образом это не сработало? Какая часть не удалась? Что случилось, чего вы не ожидали? –

+0

В чем была проблема? Что произошло, когда вы пытались использовать код? (в стороне: также необычно сохранять после каждой отдельной вставки, но я думаю, что вы отлаживаете?) – Tommy

+0

отредактировал ошибку, полученную в вопросе выше. – user2512523

ответ

0

Какао предоставляет способ, который делает это намного проще. Благодаря ключ-значение кодирования, существует метод, в NSObject, что уменьшает выше к одной линии

[myObj setValuesForKeysWithDictionary:jsonDict]; 

Это будет работать через пары ключ/значение в jsonDict и установить одинаковые пары ключ/значение на myObj

+0

Какой код заменит эта линия? – user2512523