2013-12-08 70 views
0

在我的項目中,我必須將許多數據逐個發送到遠程服務器。 我發佈使用衆所周知的方法一個對象:Restkit查詢迭代

[objectManager postObject:responseMapping 
         path:@"remoteMethod.json" 
        parameters:nil 
         success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
          NSLog(@"OK WS RK:%@",mappingResult); 
         } 
         failure:^(RKObjectRequestOperation *operation, NSError *error) { 

          NSLog(@"Error WS RK:%@",error.localizedDescription); 

         } 
    ]; 

現在,進入成功塊之後我應該開始一個新的查詢,等等。 哪個是正確的方法?或者說,我想出了一個技巧:當進入成功塊時,我發佈了一條通知到self並繼續。 我的問題是:還有其他更聰明或正確的方法來處理它嗎?

回答

1

當您試圖通知未知類/事件發生事件時應使用通知。這不是你想要做的。您更適合在成功塊中調用self上的方法,並讓該方法生成新請求/從隊列中取出請求。


您的隊列最容易實現使用可變數組。任何時候你想做點什麼,把它添加到數組中(可能是NSBlockOperation的形式)。在success塊中,檢查數組中是否有任何東西,如果有,則刪除第一個項目start

當您將每個項目添加到數組中時,您需要知道是否有任何操作正在進行中。如果不是,則需要運行添加到(或者不添加它)隊列的項目。爲此,請持有一個BOOL@property,將其設置在添加到隊列中的每個操作中,並在每個success塊中將其清除。

+0

謝謝。這確實是我所要求的:如何處理隊列。 – giuseppe

0

RestKit(即RKObjectManager)已經管理一個操作隊列。無論您何時執行postObject:path:parameters:success:failure:,都會創建一個RKObjectRequestOperation,併爲給定對象創建一個POST請求,並將其排入管理器的操作隊列。如果要確保請求順序,請將concurrentRequestsLimit設置爲1.

請參閱documentation以進一步討論。