У меня есть подкласс AFHTTPClient
Основная идея в том, что я вызываю все API через свой синглтон подкласса AFHTTPClient
, и все запросы проходят через 1 точку для обработки ошибок и отображения HUD. Это точка входа для каждого вызова API:
-(void) makeRequestWithPath:(NSString*) path andParams:(NSDictionary*) params
success:(void (^)( id JSON, AFHTTPRequestOperation *operation)) success
failure:(void (^)( NSError *error)) failure
И у меня есть много методов для вызовов API, что-то вроде этого:
-(void) getListMainTreeWithSuccess:(void (^)( id JSON, AFHTTPRequestOperation *operation)) success
failure:(void (^)( NSError *error)) failure
{
[self makeRequestWithPath:@"objects/selectlist" andParams:nil success:^(id JSON, AFHTTPRequestOperation *operation) {
success(JSON,operation);
} failure:^(NSError *error) {
failure(error);
}];
}
Это прекрасно работает для моих нужд. Но я столкнулся с проблемой, что мне нужно сделать последовательный запрос в цикле через мой подкласс AFHTTPClient
и выполнить какое-то действие, когда все они будут завершены, я нашел метод
-(void)enqueueBatchOfHTTPRequestOperationsWithRequests:(NSArray *)urlRequests
progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock
completionBlock:(void (^)(NSArray *operations))completionBlock
который должен решить мою проблему, но проблема в том, что я вызываю все методы через AFHTTPClient
и его методы getPath: и postPath: и предыдущий способ заставляет меня переписывать все и делает мой подкласс совершенно бесполезным, потому что мне нужно добавить туда NSArray
из AFHTTPRequestoperation
, который невозможно построить или извлечь из моего подкласса и моих методов. Раньше я пытался использовать __block для синхронизации запросов с семафором и чем-то еще, но мне не удалось получить то, что мне нужно, пожалуйста, помогите мне!
ОБНОВЛЕНИЕ: кажется, что невозможно даже использовать метод enqueueBatchOfHTTPRequestOperations
(даже с переписыванием всего моего кода), потому что для этого метода требуется массив операций http-запроса, но это невозможно построить POST-запрос с ними.
enqueueBatchOfHTTPRequestOperations
- person Mike Pollard   schedule 10.01.2014