2011-06-13 4 views
7

Hi communauté stackoverflow, J'utilise RKObjectManager pour faire des demandes iOS RESTful pour mapper les réponses aux objets locaux.ResKit iOS - Enregistrer plusieurs classes pour le même élément

Mon problème avec Restkit, est d'enregistrer plusieurs classes pour le même élément dans différentes requêtes. Dans cette requête, j'ai des objets imbriqués avec le même nom d'élément "List".

Voici une partie du code:

// 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]]; 

Ce que je voudrais savoir, s'il y a une solution pour enregistrer plusieurs classes pour le même élément dans différentes demandes?

Répondre

2

Eh bien, pour résoudre mon problème, je mets à jour restkit et avec le nouveau Object Mapping 2.0, il est possible d'enregistrer plusieurs classes pour les mêmes clés d'élément.

Vous avez uniquement besoin de créer des objets RKObjectMapping différents pour chaque requête et de définir setObjectMapping de chaque objet dans RKObjectLoader.

Par exemple:

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]; 
+0

Comment ça marche? Je pensais que vous aviez dit que chaque liste renvoyait le 'keypath' de la liste, mais je vous vois en utilisant deux keypaths séparés - Objects1List et Objects2List? – shawnwall

+0

[objectManager objectLoaderWithResourcePath: delegate:] a un type de retour void. Comment retourne-t-il un RKObjectLoader? –

Questions connexes