objective-c restkit

objective c - RestKit: distingue mĂșltiples solicitudes en didLoadResponse:



objective-c (2)

Me gustaría usar RestKit y manejar varias solicitudes diferentes en la misma clase, es decir, en el método didLoadResponse: ¿Cómo puedo distinguir entre las diferentes peticiones? ¿Cómo puedo saber qué solicitud se ha completado?

Estoy haciendo la solicitud a través de

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

Luego, en el método delegado.

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

¿es eso posible?


Claro, el método RKClient get: devuelve un objeto RKRequest. Simplemente establezca un userData a la solicitud y recupérelo más adelante en el delegado.

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

y comprobarlo 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 ... }


Esta no es una respuesta exacta a su pregunta, pero tengo la sensación de que algunas personas vendrán aquí preguntándose cómo distinguir múltiples 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 verifica si el objeto devuelto es un "tipo de" esa clase en particular, y si es así, 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]; } }