Aparece la image del marcador de position AFNetworking + UIImageView, pero no la image de URL

Estoy intentando utilizar la llamada UIImageView de AFNetworking para cargar imágenes desde una URL como se muestra a continuación:

[self.image setImageWithURL:[NSURL URLWithString:feed.imageURL] placeholderImage: [UIImage imageNamed:@"logo"]]; 

La image de marcador de position siempre aparece, pero la image real de "feed.imageURL" nunca lo hace. He verificado que la URL es realmente correcta. Incluso lo codificé para asegurarme, y aún nada.

Mi configuration básica de la aplicación es un controller de tabs … y en viewDidLoad, llamo a un método "fetchFeed" que realiza la request HTTP para recostackr mis datos JSON.

Mi bloque de request se ve así:

 AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { [self parseDictionary:JSON]; isLoading = NO; [self.tableView reloadData]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Error: %@", error); [self showNetworkError]; isLoading = NO; [self.tableView reloadData]; }]; operation.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; [queue addOperation:operation]; 

Resulta que el server que estaba solicitando que la image estaba enviando content-type "image/jpg" y que por defecto AFNetworking no admite este tipo de file.

Cambié el método de class en AFImageRequestOperation para que se vea así:

 + (NSSet *)defaultAcceptableContentTypes { return [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", @"image/jpg", nil]; } 

y solucionó mi problema.

Puede gestionar aceptar qué content-type desea con esta biblioteca, simplemente cambiando la request esta forma:

 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:yourURL]; [request addValue:@"image/*" forHTTPHeaderField:@"Accept"]; 

Y llame al método AFNetworking:

 AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { }]; 

De esta manera, podrás anular el content-type sin cambiar la biblioteca.

AFNetworking no admite image / jpg MIME TYPE de forma pnetworkingeterminada.

Puede admitirlo sin modificar la biblioteca AFNetworking

 [AFImageRequestOperation addAcceptableContentType:@"image/jpg"]; 

Todas las operaciones que manipulan la interfaz de usuario deben realizarse en el hilo principal. Por lo tanto, es posible que necesite usar 'performSelectorOnMainThread:' cuando vuelva a cargar los datos de la vista de tabla en el bloque de finalización.

 [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO] 

Tuve un problema similar pero resultó que estaba pasando una URL que contenía espacios en ella. Cuando codifiqué correctamente la URL usando stringByAddingPercentEscapesUsingEncoding: las imágenes ahora se cargan.