1

タイトルがそれを正しく説明していることを願っています。

次の JSON を取得しました。 {"regions":[{"name":"Region 1", "zipcodes":["80432", "80433"]}, ...]}

そして、私は2つのエンティティを持っていRegionますZipCode:

@interface Region : NSManagedObject
  @property (nonatomic, retain) NSString * name;
  @property (nonatomic, retain) NSSet *zipCodes;
@end

@interface ZipCode : NSManagedObject
  @property (nonatomic, retain) NSString * zipCode;
  @property (nonatomic, retain) Region *region;
@end

次のコードを使用して両方を埋めようとします。

RKEntityMapping *regionMapping = [RKEntityMapping mappingForEntityForName:@"Region" inManagedObjectStore:managedObjectStore];

//[regionMapping addConnectionForRelationship:@"zipCodes" connectedBy:@{@"zipCode" : @"zipcodes"}];

[regionMapping addAttributeMappingsFromDictionary:@{@"name":@"name"}];

RKResponseDescriptor *regionDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:regionMapping pathPattern:@"/regions" keyPath:@"regions" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor:regionDescriptor];

ご覧のとおり、この回答addConnectionForRelationship: connectedBy:で見たものも使用しようとしましたが、成功しませんでした。別の forを作成する必要があると思いますが、.RKEntityMappingZipCodeRKResponseDescriptor

あなたの誰かが同様の状況に対処したことがありますか? どのように解決しましたか?上記のリンクの例はかなり似ていますが、残念ながら投稿されたソリューションは非常に不完全です。

注 1: 既存のコードはデータベースに書き込みますnameが、データベースとの関係を作成せずZipCode、郵便番号も書き込みません

注 2: 最新の RestKit バージョン (0.20pre) を使用しています。

注 3: ここで私の命を救うことができます ;)

よろしくお願いします!

4

1 に答える 1

2

私は似たようなことをして、それがaddRelationshipMappingWithSourceKeyPath:mapping:最もうまくいくことを発見しました。私の理解では、ネストされたリレーションシップ (同じリクエスト) にはリレーションシップ マッピングを使用し、複数のリクエスト間でリレーションシップを作成するには接続を使用します。

これを行うには、次のように JSON を再フォーマットすることをお勧めします。

{"regions":[
    {"name":"Region 1", "zipcodes":[
        {"zipcode": "80432"},
        {"zipcode": "80433"}]},
    ...]}

...そして、マッピングを次のように変更します。

RKEntityMapping *regionMapping = [RKEntityMapping mappingForEntityForName:@"Region" inManagedObjectStore:managedObjectStore];
[regionMapping addAttributeMappingsFromArray:@[@"name"]];

RKEntityMapping *zipCodeMapping = [RKEntityMapping mappingForEntityForName:@"ZipCode" inManagedObjectStore:managedObjectStore];
[zipCodeMapping addAttributeMappingsFromArray:@[@"name"]];

[regionMapping addRelationshipMappingWithSourceKeyPath:@"zipcodes" mapping:zipCodeMapping];

RKResponseDescriptor *regionDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:regionMapping pathPattern:@"/regions" keyPath:@"regions" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor:regionDescriptor];

使用している JSON 形式 (辞書要素の配列ではなく文字列の配列) との関係をマッピングしようとはしていませんが、zipCode 属性マッピングをいじってみることでできるかもしれません。

于 2013-03-15T14:01:55.183 に答える