2013-12-21 51 views
0
  1. 首先,getObject帶有一個ID列表。
  2. 然後,將這些ID用於多個getObject的調用。

的問題是,那些多個getObject的任一項被取消(error -999RestKit 0.22.0:每個 - [getObject]調用取消上一個(錯誤-999)

RKObjectManager *objectManager = [RKObjectManager sharedManager]; 

- (void)firstGetListOfIDs 
{ 
    A *a = [A new]; 
    [objectManager getObject:a 
         path:nil 
        parameters:parameters 
        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
         for (NSString* anID in a.listOfIDs) 
          [self thenGetObjectForID:anID]; 
        } failure:nil]; 
} 

- (void)thenGetObjectForID:(NSString*)anID 
{ 
    B *b = [B new]; 
    [objectManager getObject:b 
         path:nil 
       parameters:parametersWithAnID 
        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
       } failure:nil]; 
} 

也就是說,每個getObject呼叫(在上面thenGetObjectForID:)錯誤上線211552RKObjectRequestOperation.m

E restkit.network:RKObjectRequestOperation.m:211 GET ' http://domain.com/sdk/b?id=anID ' (0/0 objects) [request=0.0000s mapping=0.0000s total=0.0006s]: Cancelled

E restkit.network:RKObjectRequestOperation.m:552 Object request failed: Underlying HTTP request operation failed with error: Error Domain=NSURLErrorDomain Code=-999 "The operation couldn’t be completed. (NSURLErrorDomain error -999.)" UserInfo=0x134772e0 {NSErrorFailingURLKey= http://domain.com/sdk/b?id=anID }

現在,我可以通過添加[objectManager.operationQueue waitUntilAllOperationsAreFinished];補救這個但是,唉這個塊中的主線。 如何製作多個,異步getObject請求?

我試過使用RKObjectManagerenqueueBatchOfObjectRequestOperations:progress:completion:,雖然不知道是否正確。

回答

0

罪魁禍首竟然是一個流浪者[[RKObjectManager sharedManager] cancelAllObjectRequestOperationsWithMethod:matchingPathPattern:];電話。

1

您應該升級到RestKit的最新版本(或至少不是預先版本)。

通常,你的代碼看起來很好,你應該可以做出多個併發請求。您應該將objectManager.operationQueue上的併發操作的最大數量設置爲5左右,否則您可能會氾濫系統,並且所有請求都會超時。

+0

即使在maxConcurrentOperationCount = 2時,請求也會互相取消('error -999')。 PS。我嘗試升級到0.22,但失敗(通過CocoaPods或作爲Git子模塊):0.22以某種方式破壞了對象映射。將嘗試0.21或0.20版本。 – Blaz

+0

沒有運氣0.20.3。所有其他條件相同的情況下,從'-pre6'版本升級會破壞映射。 – Blaz

+0

你有服務器日誌嗎?它可能會在那裏取消。或者可能是因爲沒有可用於傳輸的緩衝空間。 – Wain