Question

Je voudrais utiliser RestKit et gérer plusieurs requêtes différentes dans la même classe, c'est-à-dire dans la méthode didLoadResponse:.Comment puis-je distinguer les différentes demandes?Comment savoir quelle demande est terminée?

Je fais la demande via

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

Ensuite, dans la méthode déléguée

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

Est-ce possible?

Était-ce utile?

La solution

Bien sûr, la méthode RKClient get: renvoie un objet RKRequest.Définissez simplement un userData sur la requête et récupérez-le plus tard dans le délégué.

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

et vérifiez-le plus tard dans le délégué

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

Autres conseils

Ce n'est pas une réponse exacte à votre question, mais j'ai le sentiment que certaines personnes viendront ici se demander comment distinguer plusieurs requêtes dans didLoadObjects, comme je l'ai fait.La solution est d'utiliser isKindOfClass.

Par exemple, je fais deux appels HTTP lorsqu'un utilisateur se connecte à mon application, et je veux distinguer l'objet renvoyé de l'appel getUser de l'objet renvoyé par getSummary (car si je ne le fais pas, il se bloque).Ce code vérifie si l'objet retourné est une "sorte" de cette classe particulière, et si c'est le cas, définit l'objet sur une instance locale de cet objet.

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

    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top