2011-10-30 34 views
0

我有2個相當簡單的問題。 我有2個映射的請求發送我互相接近彼此,通過主線程調用 。RestKit。 RKObjectManager和排隊

第一個請求: [RKObjectManager sharedManager] loadObjectsAtResourcePath:@ 「SomePathToServer」 委託:自我]

第二個請求:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"SomeOTHERpathtoServer" delegate:self]; 

我的問題是: 他們是否自動對象排隊經理?

當我現在運行它們時,第一個請求將觸發一個與web服務相當大的同步通信。我在通信中發起的第二次請求,沒有被RestKit處理/接收。

如果我再次運行我的應用程序,我的代碼檢測到同步已完成,現在處理第二個請求 - 數據被接收並映射。

我必須手動將我的託管請求添加到隊列嗎?

我還沒有發現任何關於它的網絡,所以如果我不得不手動排隊它,我不知道是否有人有一個例子或方向指導。 我只發現簡單請求的排隊示例,並且我沒有 關於如何將第一個和第二個請求放入隊列的想​​法 - 如果需要 。 非常感謝幫助。 Thomas

+0

RestKit的默認操作排隊的請求。你想同步處理請求嗎?我認爲這個隊列默認允許同時執行5個請求 - 所以如果你只有2個隊列,你甚至可能不會注意到隊列。 – mja

+0

不,他們不需要同步。但是,restkit然後公關。默認會發出異步請求?這很奇怪,因爲如上所述,只處理對第一個請求的響應,對第二個請求的響應永遠不會被restkit檢測到。 – Thomas

+0

你是否實現了RKObjectLoaderDelegate的' - (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error'或'objectLoaderDidLoadUnexpectedResponse:'如果請求卡住某處?你有沒有注意到日誌中的不尋常之處?我在一個項目中使用了RestKit,就像你描述的那樣 - 我在第一個請求完成之前開始第二個請求,它工作得很好。 – mja

回答

2

RKRequestQueue將完成這項工作。您可以添加到隊列或者RKObjectLoaderRKRequest

這裏是例子:

RKRequestQueue *queue =[[RKRequestQueue alloc] init]; 
    queue.delegate = self; 
    queue.concurrentRequestsLimit = 1; 
    queue.showsNetworkActivityIndicatorWhenBusy= YES; 

    [queue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:@"resource" delegate:self]]; 
    [queue addRequest:[RKClient sharedClient] requestWithResourcePath:@"Another Resource "delegate: self]]; 

    [queue start];