2013-12-21 1 views
0
  1. Во-первых, getObject со списком идентификаторов.
  2. Затем используйте эти ID для нескольких вызовов getObject.

Проблема заключается в том, что любые один из тех многократного getObject будет отменено (error -999).RestKit 0.22.0: each - [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: выше) ошибки на линиях 211 и 552 в RKObjectRequestOperation.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

 Смежные вопросы

  • Нет связанных вопросов^_^