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
...
}
возможно?
Ответы
Ответ 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];
}
}