2011-12-05 15 views
19

Mi piacerebbe utilizzare RestKit e gestire diverse richieste nella stessa classe, ad esempio nel metodo didLoadResponse:. Come posso distinguere tra le diverse richieste? Come faccio a sapere quale richiesta è stata completata?RestKit: distinguere più richieste in didLoadResponse:

sto facendo la richiesta via

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

Poi, nel delegato metodo

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

è possibile?

risposta

22

Certo, il metodo RKClient get: restituisce un oggetto RKRequest. Basta impostare un userData alla richiesta e recuperarla successivamente nel delegato.

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

e verificare in un secondo momento nel delegato

- (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

Dove è la tua risposta? – mja

0

Questa non è una risposta esatta alla tua domanda, ma ho la sensazione che alcune persone verranno qui pensando a come distinguere più richieste in didLoadObjects, come ho fatto io. La soluzione è utilizzare isKindOfClass.

Ad esempio, effettuo due chiamate HTTP quando un utente accede alla mia app e desidero distinguere l'oggetto restituito dalla chiamata getUser dall'oggetto restituito da getSummary (perché se non lo faccio, si blocca). Questo codice controlla se l'oggetto restituito è un "tipo di" quella particolare classe e, in tal caso, imposta l'oggetto su un'istanza locale di tale oggetto.

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

    } 
} 
Problemi correlati