2011-12-05 58 views
19

我想使用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 
     ... 
} 

這可能嗎?

回答

22

當然,RKClient get:方法返回一個RKRequest對象。只需將該用戶數據設置爲該請求,並稍後在委託中進行檢索。

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

你的答案在哪裏? – mja

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

    } 
}