2014-09-15 3 views
0

Я получаю ответ от JSON хранится в массиве, и я хочу сохранить значения {albumId albumName coverPhotoURL createdDate} в Core Data, пожалуйста, помогите мне.Как хранить данные JSON в основных данных в iOS

(
     { 
     albumId = 1; 
     albumName = UAE; 
     coverPhotoURL = "http://1-dot-digiphoto-01.appspot.com/serve?blob-key=AMIfv95XeG-ii4aKZsUB5w-ClP0QUhJZa-o5BQRvdqArCCwg0Ueb13-wAfmyNHgaDdTaFS152_kXkJg5_9386zlfRCDc3fagW7Ekagdd6_VvJl6IscqNkyvVkXKYAqIRe-KqDMpjG-cW"; 
     createdDate = "10-Jun-2010 06:11 PM"; 
     description = "photos took in Dubai"; 
     lastViewedDate = "10-Jun-2010 06:11 PM"; 
     modifiedDate = "10-Jun-2010 06:11 PM"; 
     numberOfPhotos = 10; 
     } 
    ) 
+1

Вы должны создать объект с требуемыми свойствами, а затем сопоставить этот JSON к нему. – Anupdas

+0

Я сделал это – Chenna

+0

Вы можете попробовать использовать MagicalRecord, отличную оболочку для CoreData. Http: //www.cimgf.com/2012/05/29/importing-data-made-easy/ – Anupdas

ответ

0

Вам нужно создать подкласс NSManagedObject и определить все необходимые поля

@interface AlbumInfo : NSManagedObject 

@property (nonatomic, retain) NSNumber * albumId; 
@property (nonatomic, retain) NSString * albumName; 
@property (nonatomic, retain) NSString * coverPhotoURL; 
@property (nonatomic, retain) NSDate * createdDate; 

@end 

, то вам нужно вызвать этот код

context = /* Get the NSManagedObject context */ 

AlbumInfo *item = [NSEntityDescription insertNewObjectForEntityForName:@"AlbumInfo" inManagedObjectContext:context]; 

item.albumId = @"some value from json"; 
/* ... so on ...*/ 

NSError *error = nil; 
if (context != nil) { 
    if ([managedObjectContext hasChanges] && ![context save:&error]) { 
     // Replace this implementation with code to handle the error appropriately. 
     // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    } 
} 
0
  • I Предположим, что вы создали объект, который подходит для данных, которые необходимо сохранить.
  • Создайте NSEntityDescription и NSManagedObject, чтобы начать загрузку объекта в Core Data.

    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"ALbum" inManagedObjectContext:self.managedObjectContext]; 
    NSManagedObject *newAlbum = [[NSManagedObject alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:self.managedObjectContext]; 
    
  • Затем следует установить значения в управляемый объект

    [newPerson setValue:@"photos took in Dubai" forKey:@"description"]; 
    
    [newPerson setValue:@" UAE" forKey:@"albumName"]; 
    
  • Последний шаг, который вы должны сохранить эти изменения, как этот

    NSError *error = nil; 
    
    if (![newAlbum.managedObjectContext save:&error]) { 
    
        NSLog(@"Unable to save managed object context."); 
        NSLog(@"%@, %@", error, error.localizedDescription); 
    } 
    
+0

, и если вы новичок в основных данных, я предлагаю прочитать эту серию http://code.tutsplus.com/categories/core-data?view=grid –

0

Я хотел бы предложить importing data using MagicalRecord в отличная оболочка для CoreData. Он предоставляет условный метод конфигурации импорта данных.

Импортирующая функция способна отображение данных, даже если свойства различны в модели JSon по сравнению с объектом, или если вы хотите, чтобы преобразовать дату, представленную в строке для NSDate

Чтобы избежать дублирования записей MagicalRecord делает это соглашение использовать уникальныйID. т. е. он ожидает уникальное свойство для объекта Album, такого как albumID, Employee - employeeID и т. д. Поэтому нужно смоделировать его в соответствии с соглашением. В соответствии с вашим примером будет такое.

enter image description here

Вы можете отметить, что в User Info из albumID, свойство отображается в ALBUMID. Аналогично, createdDate не содержит строковое значение, а NSDate.

enter image description here

dateFormat устанавливается в UserInfo из createdDate

Теперь часть конфигурации завершена. Вы можете импортировать дату в CoreData как в

NSData *jsonData = //Data from web service; 
NSArray *albums = [NSJSONSerialization JSONObjectWithData:jsonData 
                options:0 
                error:nil]; 
for (id obj in albums) { 
    [Album MR_importFromObject:obj]; 
} 

Проверьте, если данные правильно импортированы с помощью

NSArray *savedAlbums = [Album MR_findAll]; 
Album *album = [savedAlbums lastObject]; 
NSLog(@"Created Date : %@",album.createdDate); 
Смежные вопросы