2012-02-27 10 views
7

Sto cercando di utilizzare la chiamata AFNetworking UIImageView per caricare le immagini da un URL come illustrato di seguito:un'immagine segnaposto AFNetworking + UIImageView si presenta, ma non URL dell'immagine

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

L'immagine segnaposto mostra sempre in su, ma l'immagine reale da "feed.imageURL" non lo fa mai. Ho verificato che l'URL sia effettivamente corretto. L'ho anche codificato per essere sicuro, e ancora niente.

La mia configurazione di base dell'app è un controller di schede ... e in viewDidLoad, chiamo un metodo "fetchFeed" che esegue la richiesta HTTP per raccogliere i miei dati JSON.

mio blocco di richiesta appare come:

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

Sono le immagini all'interno UITableViewCells? Stai chiamando 'setImageWithURL' nel tuo' cellForRowAtIndexPath: 'metodo delegato? – jonkroll

+0

Sì, a entrambe le vostre domande. –

+0

Puoi includere il codice che usi per impostare le immagini remote, in 'tableView: cellForRowAtIndexPath:'? – mattt

risposta

9

'venuto fuori il server mi chiedeva l'immagine da inviare è stato content-type "image/jpg" e per impostazione predefinita AFNetworking non supporta questo tipo di file.

ho cambiato il metodo di classe in AFImageRequestOperation a guardare come:

+ (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]; 
} 

e fissa il mio problema.

+2

Hai fatto la mia giornata! Per AFNetworking 2.0 è "autonomo".acceptableContentTypes = [[NSSet alloc] initWithObjects: @ "image/tiff", @ "image/jpeg", @ "image/jpg", @ "image/gif", @ "image/png", @ "image/ico" , @ "immagine/x-icona", @ "immagine/bmp", @ "immagine/x-bmp", @ "immagine/x-xbitmap", @ "immagine/x-win-bitmap", nil]; ' in AFURLResponseSerialization.m – Adnan

+0

Come dovrei usare questo? , Penso di avere lo stesso problema! [LINK] (http://stackoverflow.com/questions/25766499/having-issue-with-getting-image-from-server) –

0

Tutte le operazioni che manipolano l'interfaccia utente deve essere eseguita sul thread principale. Quindi potrebbe essere necessario utilizzare 'performSelectorOnMainThread:' quando si ricaricano i dati della vista tabella nel blocco di completamento.

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

Buon consiglio Jonkroll, comunque non ha aiutato la mia causa. –

+3

FWIW, tutti i blocchi di callback di AFNetworking vengono eseguiti sul thread principale già di default. – mattt

0

Ho avuto un problema simile ma si è scoperto che stavo passando un URL che conteneva spazi in esso. Quando ho codificato correttamente l'URL utilizzando stringByAddingPercentEscapesUsingEncoding: ora le immagini vengono caricate.

2

È possibile gestire ad accettare ciò che content-type si vuole con questa libreria semplicemente cambiando il request in questo modo:

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

e chiamare il metodo AFNetworking:

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

In questo modo si sarà in grado di scavalcare lo content-typesenza cambiando la libreria.

2

AFNetworking non supporta image/jpg MIME TYPE per impostazione predefinita.

È possibile sostenerla senza modificare l'AFNetworking Biblioteca

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