RestKit: различать несколько запросов в didLoadResponse: - PullRequest
19 голосов
/ 05 декабря 2011

Я бы хотел использовать 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
        ...
}

это возможно?

Ответы [ 2 ]

22 голосов
/ 05 декабря 2011

Конечно, метод 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
        ...
}
0 голосов
/ 15 августа 2012

Это не точный ответ на ваш вопрос, но у меня есть ощущение, что некоторые люди придут сюда, задаваясь вопросом, как различать множественные запросы в 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];

    }
}
...