iOS AFNetworking bloqueando el hilo principal

Acabo de cambiar a AFNetworking para manejar toda mi networking dentro de mi aplicación. Sin embargo, ahora parece estar bloqueando el hilo principal, por lo que mi MBProgressHUD no girará hasta después de que termine la operación y my pullToRefreshView tampoco se animará hasta después de la operación. ¿Cómo arreglaría esto?

- (void)pullToRefreshViewShouldRefresh:(PullToRefreshView *)view; { // Call the refreshData method to update the table [dataController refreshData]; } - (void)refreshData { NSURLRequest *request = [NSURLRequest requestWithURL:[FCDataController parserURL]]; NSLog(@"URL = %@", request); AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) { _calls = [[NSMutableArray alloc] init]; XMLParser.delegate = self; [XMLParser parse]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) { if ([delegate respondsToSelector:@selector(refreshDataDidFailWithError:)]) { [delegate refreshDataDidFailWithError:error]; } }]; [operation start]; } 

De forma pnetworkingeterminada, AFNetworking llama a los bloques de éxito / falla en el hilo principal (después de que la operación de networking se ejecuta en un hilo de background). Esto es una conveniencia para el caso común donde su código solo necesita actualizar la interfaz de usuario. Si necesita realizar una operación más compleja con los resultados (como analizar un gran documento XML), entonces puede especificar alguna otra queue de envío en la que se debe ejecutar su callback. Consulte la documentation para get más información.

Actualización (11 de febrero de 2016): AFNetworking ha cambiado bastante en los casi tres años desde que AFHTTPRequestOperation esta respuesta: AFHTTPRequestOperation ya no existe en la versión actual (3.0.4). He actualizado el enlace para que no esté roto, pero la forma en que lograrías algo similar en estos días es muy diferente.

¿Dónde se llama a MBProgressHUD? ¿Estás usando SSPullToRefresh o alguna otra implementación? Estoy escribiendo un código muy similar en un proyecto actual y funciona muy bien.

 - (BOOL)pullToRefreshViewShouldStartLoading:(SSPullToRefreshView *)view { return YES; } - (void)pullToRefreshViewDidStartLoading:(SSPullToRefreshView *)view { [self refresh]; } - (void)refresh { NSURL* url = [NSURL URLWithString:@"some_url_here"]; NSURLRequest* request = [NSURLRequest requestWithURL:url]; AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { // consume response [_pullToRefreshView finishLoading]; [self.tableView reloadData]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { }]; [operation start]; 

Mi suposition es que - (void)pullToRefreshViewShouldRefresh:(PullToRefreshView *)view; { - (void)pullToRefreshViewShouldRefresh:(PullToRefreshView *)view; { se llama desde un hilo de background.