2011-12-05 14 views
19

Me gustaría utilizar RestKit y manejar varias solicitudes diferentes en la misma clase, es decir, en el método didLoadResponse:. ¿Cómo puedo distinguir entre las diferentes solicitudes? ¿Cómo sé qué solicitud ha finalizado?RestKit: distinguir múltiples solicitudes en didLoadResponse:

que estoy haciendo la solicitud a través

RKClient *client = [RKClient sharedClient]; 
[client get:@"/....", method] delegate:self]; 

Luego, en el delegado método

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response { 
    if (???) // request which gets XY returned 
     ... 
    else if (???) // request which gets YZ returned 
     ... 
} 

es posible?

Respuesta

22

Sure, el método RKClient get: devuelve un objeto RKRequest. Simplemente configure un userData para la solicitud y recupérela más tarde en el delegado.

RKClient *client = [RKClient sharedClient]; 
RKRequest *request = [client get:@"/....", method] delegate:self]; 
[request setUserData:@"FirstRequest"]; 

y comprobar más tarde en el delegado

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response { 
    id userData = [request userData]; 
    if ([userData isEqual:@"FirstRequest"]) // request which gets XY returned 
     ... 
    else if (...) // request which gets YZ returned 
     ... 
} 
+0

¿Dónde está tu respuesta? – mja

0

Esto no es una respuesta exacta a su pregunta, pero tengo la sensación de que algunas personas vendrán aquí preguntando cómo distinguir varias solicitudes en didLoadObjects, como lo hice. La solución es usar isKindOfClass.

Por ejemplo, hago dos llamadas HTTP cuando un usuario inicia sesión en mi aplicación, y quiero distinguir el objeto devuelto de la llamada getUser del objeto devuelto por getSummary (porque si no lo hago, se bloquea). Este código comprueba si el objeto devuelto es un "tipo de" esa clase en particular y, en caso afirmativo, establece el objeto en una instancia local de ese objeto.

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 

    if ([[objects objectAtIndex:0] isKindOfClass:[APIUser class]]) { 

     APIUser *apiUser = [objects objectAtIndex:0]; 

    } 
    else if ([[objects objectAtIndex:0] isKindOfClass:[APIUserSummary class]]) { 

     APIUserSummary *summary = [objects objectAtIndex:0]; 

    } 
} 
Cuestiones relacionadas