2014-10-24 2 views
-1

Я предоставил образец файла JSON (для целей тестирования у меня нет раннего доступа к веб-службе). после загрузки файла и преобразования в NSDictionary как я могу использовать этот словарь и синхронизировать свою базу данных? все учебные пособия и образцы, которые я прочитал, используют веб-службуRestKit - База данных синхронизации с локальным файлом JSON

Я создал свое сопоставление для всех объектов и применил их отношения.

пример:

+ (RKEntityMapping *) mapTableInManagedObjectStore:(RKManagedObjectStore *)managedObjectStore 
{ 
    RKEntityMapping *tableMapping = [RKEntityMapping mappingForEntityForName:@"Table" inManagedObjectStore:managedObjectStore]; 
    tableMapping.identificationAttributes = @[@"tableID"]; 
    [tableMapping addAttributeMappingsFromDictionary:@{ 
                 @"ID":@"tableID", 
                 @"TableNumber":@"tableNumber", 
                 @"NumberOfChairs":@"numberOfChairs"}]; 

    return tableMapping; 
} 
+0

Вы пытались использовать URL-адрес файла? Раньше это работало, но я, кажется, помню, что что-то сломало. В противном случае просто разместите файл где-нибудь, а затем измените URL-адрес, который вы используете для доступа к нему позже. – Wain

ответ

0

Вот как я сделал, и хорошо работает:

// read file 
NSString *myJSON = [[NSString alloc] initWithContentsOfFile:contentPath encoding:NSUTF8StringEncoding error:NULL]; 

NSString* MIMEType = @"application/json"; 
NSError* parseError; 

NSData *data = [myJSON dataUsingEncoding:NSUTF8StringEncoding]; 
id parsedData = [RKMIMETypeSerialization objectFromData:data MIMEType:MIMEType error:&parseError]; 
if (parsedData == nil && parseError) { 
    NSLog(@"Cannot parse data: %@", parseError); 
} 

//convert NSData to NSDictionary 
NSError *errorJson=nil; 
NSDictionary* responseDict = [NSJSONSerialization JSONObjectWithData:lookServerResponseData options:kNilOptions error:&errorJson]; 
NSDictionary *tableDic = responseDict; 

//perform mapping 
    RKManagedObjectStore *managedObjectStore = [HAObjectManager sharedManager].managedObjectStore; 
    Table *table = [[Table findAll] firstObject]; 
    RKManagedObjectMappingOperationDataSource *mappingDataSource = [[RKManagedObjectMappingOperationDataSource alloc] initWithManagedObjectContext:managedObjectStore.mainQueueManagedObjectContext cache:managedObjectStore.managedObjectCache]; 

    RKMappingOperation *mappingOperation = [[RKMappingOperation alloc] initWithSourceObject:tableDic destinationObject:table mapping:[MappingProvider mapTablebjectStore:managedObjectStore]]; 

    mappingOperation.dataSource = mappingDataSource; 
    NSError *error = nil; 
    [mappingOperation performMapping:&error]; 

RKMappingOperation работа для отображения значений из исходного объекта до объекта назначения.
теперь атрибуты таблицы обновляются значениями tableDic. (таблица вид NSManagedObject)

Смежные вопросы