2012-02-27 23 views
7

Estoy tratando de utilizar la llamada AFNetworking UIImageView cargar imágenes desde una URL como se muestra a continuación:imagen de marcador AFNetworking + UIImageView aparece, pero no URL de la imagen

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

La imagen de marcador de posición aparece siempre, pero la imagen real de "feed.imageURL" nunca lo hace. Verifiqué que la URL es realmente correcta. Incluso lo codifiqué para asegurarme, y todavía nada.

Mi configuración básica de la aplicación es un controlador de pestañas ... y en viewDidLoad, invoco un método "fetchFeed" que realiza la solicitud HTTP para recopilar mis datos JSON.

Mi bloque de solicitud de aspecto:

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]; 
+0

Son sus imágenes dentro de UITableViewCells? ¿Estás llamando 'setImageWithURL' en tu método de delegado' cellForRowAtIndexPath: '? – jonkroll

+0

Sí, a ambas preguntas. –

+0

¿Podría incluir el código que usa para configurar las imágenes remotas, en 'tableView: cellForRowAtIndexPath:'? – mattt

Respuesta

9

Resulta que el servidor estaba solicitando la imagen desde enviaba content-type "image/jpg" y por defecto AFNetworking no admite este tipo de archivo.

he cambiado el método de clase AFImageRequestOperation para parecerse a:

+ (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 fijo mi problema.

+2

¡Hiciste mi día! Para AFNetworking 2.0 es 'self.acceptableContentTypes = [[NSSet alloc] initWithObjects: @ "image/tiff", @ "image/jpeg", @ "image/jpg", @ "image/gif", @ "image/png", @ "image/ico" , @ "image/x-icon", @ "image/bmp", @ "image/x-bmp", @ "image/x-xbitmap", @ "image/x-win-bitmap", nil]; ' en AFURLResponseSerialization.m – Adnan

+0

¿Cómo debo usar esto? ¡Creo que tengo el mismo problema! [LINK] (http://stackoverflow.com/questions/25766499/having-issue-with-getting-image-from-server) –

0

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 su tabla de visitas en el bloque de finalización.

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

Buena sugerencia Jonkroll, aunque no ayudó a mi causa. –

+3

FWIW, todos los bloques de devolución de llamada de AFNetworking se ejecutan en el hilo principal de manera predeterminada. – mattt

0

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 se cargan.

2

Puede administrar a aceptar lo que content-type desea con esta biblioteca simplemente cambiando el request así:

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 usted será capaz de anula content-typesin cambiando la biblioteca.

2

AFNetworking no admite imagen/jpg MIME TYPE de forma predeterminada.

Usted puede apoyar sin modificar la Biblioteca AFNetworking

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