0

私はこの問題に長い間取り組んでいますが、私のニーズに合った解決策を見つけることができませんでした.

問題は、構造全体をロードせずにデータをロードして関係にマップするにはどうすればよいかということです

簡単な例:

私たちはいくつかの鳥を手に入れました:

{ 
    "birds":[{ 
            "bird":{"id":"1","value":"LaLeLu"}, 
            "bird":{"id":"2","value":"LeLeLa"}, 
            ... 
    }] 
} 

これは、次のようにマッピングできます。

RKManagedObjectMapping *birdMapping = [RKManagedObjectMapping 
mappingForClass:[Bird class]]; 
menuMapping.primaryKeyAttribute = @"identifier"; 
[menuMapping mapKeyPath:@"value" toAttribute:@"value"]; 
[menuMapping mapKeyPath:@"id" toAttribute:@"identifier"]; 

[[[RKObjectManager sharedManager] mappingProvider] 
setMappingForKeyPath:"birds.bird"]; 

今ではうまく機能します。

これで、すべての鳥に多くのコメントを付けることができますが、最初のリクエストでこれらすべてのコメントをロードしたくありません。

ユーザーが特定の鳥をクリックすると、コメントが読み込まれます。

だから私は要求します:

NSString *resourcePath = [NSString stringWithFormat:@"/birds/%@/ 
comments", myBird.id] 
[[RKObjectManager sharedManager] 
loadObjectsAtResourcePath:resourcePath]; 

RestKit のニーズに合うという応答を変更できますが、ニーズは何ですか?

{ 
    "comments":[{ 
            "comment"{"id":"1","value":"Comment1","bird_id":"1"} 
    }] 
} 

そして今、この応答をマッピングする方法がわかりません。

鳥に関係なくコメントをマッピングすることは問題ありません。

RKManagedObjectMapping *commentMapping = [RKManagedObjectMapping 
mappingForClass:[Comment class]]; 
menuMapping.primaryKeyAttribute = @"identifier"; 
[menuMapping mapKeyPath:@"value" toAttribute:@"value"]; 
[menuMapping mapKeyPath:@"id" toAttribute:@"identifier"]; 

[[[RKObjectManager sharedManager] mappingProvider] 
setMappingForKeyPath:"comments.comment"]; 

誰かが私の問題を理解し、助けてくれることを願っています

4

1 に答える 1

0

このソリューションに関心のあるすべてのユーザー向け:

RestKit 0.10.0 は問題を修正します:

RKManagedObjectMapping *commentMapping = [RKManagedObjectMapping 
mappingForClass:[Comment class]]; 
commentMapping.primaryKeyAttribute = @"identifier"; 
[commentMapping mapKeyPath:@"value" toAttribute:@"value"]; 
[commentMapping mapKeyPath:@"id" toAttribute:@"identifier"];

// Here starts the relevant part:

[commentMapping mapKeyPath:@"bird_id" to Attribute:@"bird_id"];
[commentMapping mapRelationship:@"bird" withMapping:birdMapping];
[commentMapping connectRelationship:@"bird" withObjectPropertyForPrimaryKeyAttribute:"bird_id"]



[[[RKObjectManager sharedManager] mappingProvider] 
    setMapping:commentMapping ForKeyPath:"comments.comment"]; 
于 2012-04-06T14:06:44.323 に答える