2011-12-05 27 views
19

Tôi muốn sử dụng RestKit và xử lý một số yêu cầu khác nhau trong cùng một lớp, tức là trong phương thức didLoadResponse:. Làm thế nào tôi có thể phân biệt giữa các yêu cầu khác nhau? Làm cách nào để biết yêu cầu nào đã hoàn tất?RestKit: phân biệt nhiều yêu cầu trong didLoadResponse:

tôi đang làm theo yêu cầu thông qua

RKClient *client = [RKClient sharedClient]; 
[client get:@"/....", method] delegate:self]; 

Sau đó, trong các đại biểu-method

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response { 
    if (???) // request which gets XY returned 
     ... 
    else if (???) // request which gets YZ returned 
     ... 
} 

là có thể?

Trả lời

22

Chắc chắn, phương thức RKClient get: trả về đối tượng RKRequest. Chỉ cần đặt userData vào yêu cầu và truy xuất nó sau này trong ủy nhiệm.

RKClient *client = [RKClient sharedClient]; 
RKRequest *request = [client get:@"/....", method] delegate:self]; 
[request setUserData:@"FirstRequest"]; 

và kiểm tra xem nó sau này trong các đại biểu

- (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

Câu trả lời của bạn ở đâu? – mja

0

Đây không phải là một câu trả lời chính xác cho câu hỏi của bạn, nhưng tôi có cảm giác rằng một số người sẽ đến đây tự hỏi làm thế nào để phân biệt được nhiều yêu cầu trong didLoadObjects, như tôi đã làm. Giải pháp là sử dụng isKindOfClass.

Ví dụ, tôi thực hiện hai cuộc gọi HTTP khi người dùng đăng nhập vào ứng dụng của tôi, và tôi muốn để phân biệt các đối tượng trở về từ cuộc gọi getUser từ đối tượng được trả về bởi getSummary (vì nếu tôi làm không thì nó bị treo). Mã này kiểm tra xem đối tượng được trả về có phải là một loại "" lớp đó, và nếu như vậy đặt đối tượng thành một cá thể cục bộ của đối tượng đó.

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

    } 
} 
Các vấn đề liên quan