2012-06-21 5 views
0

Я использую RestKit в первый раз, и у меня возникают некоторые проблемы с получением объектов для сохранения в базе данных, или их значения не становятся строгими.RestKit не сохраняет данные в базе данных

У меня есть запрос JSON, который выглядит примерно так:

{"categories":{"id":1 ... 

Я установил отображение на категории, как это:

RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURLString:@"[base-url]"]; 

RKManagedObjectStore* objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"App.sqlite"]; 
objectManager.objectStore = objectStore; 

objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; 

RKManagedObjectMapping *categoryMapping = [RKManagedObjectMapping mappingForClass:[Category class] inManagedObjectStore:objectManager.objectStore]; 

[objectManager.mappingProvider setObjectMapping:categoryMapping forResourcePathPattern:@"[path-to-json].json"]; 

[[RKObjectManager sharedManager].mappingProvider setMapping:categoryMapping forKeyPath:@"categories"]; 

// Maps keys between the database and costom model object. 
categoryMapping.primaryKeyAttribute = @"categoryId"; 
[categoryMapping mapKeyPath:@"categories.id" toAttribute:@"categoryId"]; 
[categoryMapping mapKeyPath:@"categories.name" toAttribute:@"name"]; 
[...] 

Мой заказ объектная модель для этой категории выглядит следующим образом:

@interface Category : NSManagedObject 

@property (nonatomic, retain) NSNumber *categoryId; 
@property (nonatomic, retain) NSString *name; 
[...] 

@implementation Category 

@dynamic categoryId; 
@dynamic name; 
[...] 

Я загружаю такие объекты (например, пример Twitter):

// Loads from the database 
- (void)loadObjectsFromDataStore { 

    NSFetchRequest *request = [Category fetchRequest]; 
    _categories = [Category objectsWithFetchRequest:request]; 
} 

- (void)loadCategories { 
    RKObjectManager *objectManager = [RKObjectManager sharedManager]; 
    [objectManager loadObjectsAtResourcePath:@"[path-to-json].json" delegate:self]; 
} 

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 

    // The array is always empty. 
    NSLog(@"Objects: %@", objects); 

    [[NSUserDefaults standardUserDefaults] synchronize]; 
    [self loadObjectsFromDataStore]; 
} 

И как я уже сказал, когда я проверить локальную базу данных от имитатора он получает вставленным но значения является NULL и category_id всегда 0.

Любые идеи о том, как решить эту проблему? Было бы очень признательно!

ответ

1

Попробуйте это отображение:

RKManagedObjectMapping* categoryMapping = [RKManagedObjectMapping mappingForClass: [Category class]]; 
categoryMapping.primaryKeyAttribute = @"categoryId"; 
categoryMapping.rootKeyPath = @"categories"; 
[categoryMapping mapKeyPathsToAttributes: @"id", @"categoryId", @"name", @"name", nil]; 

и

[[RKObjectManager sharedManager].mappingProvider setMapping:categoryMapping forKeyPath:@""]; 

Он говорит, использовать эту карту при обнаружении "категории", а индекс объекта данных ядра с помощью "CategoryId".

ИЛИ

RKManagedObjectMapping* categoryMapping = [RKManagedObjectMapping mappingForClass: [Category class]]; 
categoryMapping.primaryKeyAttribute = @"categoryId"; 
[categoryMapping mapKeyPathsToAttributes: @"id", @"categoryId", @"name", @"name", nil]; 

и

[[RKObjectManager sharedManager].mappingProvider setMapping:categoryMapping forKeyPath:@"categories"]; 
+0

Спасибо, первый картирование работал, мне не нужно менять '[[RKObjectManager sharedManager] .mappingProvider setMapping: categoryMapping forKeyPath: @ ""] ; 'Но я изменил это:' objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename: имя_базы базы данных usingSeedDatabaseName: nil managedObjectModel: nil delegate: self]; '. Благодарю. – Anders

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