2012-06-21 38 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

上的任何想法如何解决这个问题?将非常感激!通过 “的categoryId”

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:@""]; 

它说,使用该地图,当你发现 “类别”,和索引核心数据对象,具有:

回答

1

试试这个映射。

OR

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:databaseName usingSeedDatabaseName:nil managedObjectModel:nil delegate:self];'。谢谢。 – Anders