7

こんにちは、stackoverflow コミュニティです。私は RKObjectManager を使用して iOS RESTful リクエストを作成し、レスポンスをローカル オブジェクトにマップしています。

Restkit に関する私の問題は、異なるリクエストで同じ Element に対して複数のクラスを登録することです。このリクエストでは、同じ要素名「List」を持つネストされたオブジェクトがあります。

コードの一部を次に示します。

// Get array of RKObjects1 - First request of the queue
RKObjectManager * objectManager = [RKObjectManager sharedManager];
[objectManager registerClass:[RKTObject1 class] forElementNamed:@"List"];

RKObjectLoader * loader = [objectManager objectLoaderWithResourcePath:@"objects1" delegate:self];
[loader setObjectClass:[RKTList class]];



// Get array of RKObjects2 - Second request of the queue
RKObjectManager * objectManager = [RKObjectManager sharedManager];
[objectManager registerClass:[RKObjects2 class] forElementNamed:@"List"];

RKObjectLoader * loader = [objectManager objectLoaderWithResourcePath:@"objects2" delegate:self];
[loader setObjectClass:[RKTList class]];

異なるリクエストで同じ要素に対して複数のクラスを登録する解決策がある場合、私が知りたいことは何ですか?

4

1 に答える 1

2

さて、私の問題を解決するために、restkit を更新し、新しいオブジェクト マッピング 2.0 を使用して、同じ要素キーに対して複数のクラスを登録することができます。

リクエストごとに異なる RKObjectMapping オブジェクトを作成し、RKObjectLoader で各オブジェクトの setObjectMapping を作成するだけです。

例えば:

RKObjectMappingProvider * mappingProvider = [RKObjectManager sharedManager].mappingProvider; 

// Create 2 RKObjectMapping for each request
RKObjectMapping * object1Mapping = [RKObjectMapping mappingForClass:[RKTList class]];
[object1Mapping mapKeyPath:@"Id" toAttribute:@"idObject"];
[object1Mapping mapKeyPath:@"Name" toAttribute:@"name"];
[mappingProvider setMapping:object1Mapping forKeyPath:@"Objects1List"];


RKObjectMapping * object2Mapping = [RKObjectMapping mappingForClass:[RKTList class]];
[object2Mapping mapKeyPath:@"Id" toAttribute:@"idObject"];
[object2Mapping mapKeyPath:@"Name" toAttribute:@"name"];
[mappingProvider setMapping:object2Mapping forKeyPath:@"Objects2List"];

//Make the 2 request with explicit object mapping
RKObjectManager * objectManager = [RKObjectManager sharedManager];
RKObjectLoader * loaderFirstRequest = [objectManager objectLoaderWithResourcePath:@"objects1" delegate:self];
[loaderFirstRequest setObjectMapping:object1Mapping];

RKObjectLoader * loaderSecondRequest = [objectManager objectLoaderWithResourcePath:@"objects2" delegate:self];
[loaderSecondRequest setObjectMapping:object2Mapping];
于 2011-06-21T14:29:19.360 に答える