Подтвердить что ты не робот

RestKit: различать несколько запросов в didLoadResponse:

Я хотел бы использовать RestKit и обрабатывать несколько разных запросов в одном классе, т.е. в методе didLoadResponse:. Как я могу различать разные запросы? Как узнать, какой запрос завершен?

Я делаю запрос через

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

Затем в методе делегата

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

возможно?

4b9b3361

Ответ 1

Конечно, метод RKClient get: возвращает объект RKRequest. Просто установите userData для запроса и получите его позже в делегате.

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

и проверить его позже в делегате

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

Ответ 2

Это не точный ответ на ваш вопрос, но я чувствую, что некоторые люди придут сюда, задаваясь вопросом, как различать несколько запросов в didLoadObjects, как и я. Решение состоит в использовании isKindOfClass.

Например, я делаю два HTTP-вызова, когда пользователь входит в мое приложение, и я хочу отличить объект, возвращенный от вызова getUser, из объекта, возвращаемого getSummary (потому что, если я этого не сделаю, он сработает). Этот код проверяет, является ли возвращаемый объект "видом" этого конкретного класса, и если он задает объект локальному экземпляру этого объекта.

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

    }
}