Сказать dispatch_main_queue, чтобы он обрабатывал все свои блоки из основной очереди?

Я делаю тест с AFHTTPClient, чтобы проверить ответ бэкэнда.

__block id testedResponseObject = nil;
[client getPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    testedResponseObject = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    testedResponseObject = nil;
}];
[client.operationQueue waitUntilAllOperationsAreFinished];

STAssertNotNil(testedResponseObject, @"");

Проблема в том, что он ожидает завершения всех операций, но не выполняет блок успеха, потому что он запланирован на dispatch_get_main_queue(). Есть ли способ сказать, чтобы dispatch_get_main_queue() заканчивал свои блоки из основной очереди?


person david    schedule 29.05.2013    source источник


Ответы (1)


Вместо того, чтобы полагаться на completionBlock, вы можете напрямую обращаться к responseData (или любому другому свойству):

NSURLRequest *request = [client requestWithMethod:@"GET" path:path parameters:nil];
AFHTTPRequestOperation *operation = [client HTTPRequestOperationWithRequest:request success:nil failure:nil];
[client enqueuHTTPRequestOperation:operation];
[client.operationQueue waitUntilAllOperationsAreFinished];

STAssertNotNil(operation.responseData, @"");
person mattt    schedule 29.05.2013
comment
Спасибо, это работает. (Я использую AFTHTTPClient, поэтому я получаю операцию от [client.operationQueue lastObject]) - person david; 03.06.2013