RestKit:在didLoadResponse中区分多个请求:

时间:2011-12-05 15:01:23

标签: objective-c restkit

我想使用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 个答案:

答案 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];

    }
}