我想使用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
...
}
可能吗?
答案 0 :(得分:22)
当然,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
...
}
答案 1 :(得分:0)
这不是你问题的确切答案,但我觉得有些人会想到如何区分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];
}
}