0

初めて 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 です。

これを解決する方法についてのアイデアはありますか? よろしくお願いします!

4

1 に答える 1

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

「categories」を検出するときにこのマップを使用し、「categoryId」でコアデータオブジェクトにインデックスを付けると書かれています。

また

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

[[RKObjectManager sharedManager].mappingProvider setMapping:categoryMapping forKeyPath:@"categories"];
于 2012-06-21T15:23:22.793 に答える