Domanda

Sto cercando di utilizzare la chiamata UiImageView Afnetworking per caricare le immagini da un URL come mostrato di seguito:

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

L'immagine segnaposto viene sempre visualizzata, ma l'immagine effettiva di "Feed.imageurl" non lo fa mai. Ho verificato che l'URL è effettivamente corretto. L'ho persino codificato per assicurarmi, e ancora niente.

La mia configurazione di app di base è un controller di scheda ... e in ViewDidload, chiamo un metodo "FetchFeed" che esegue la richiesta HTTP per raccogliere i miei dati JSON.

Il mio blocco di richiesta sembra:

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];
È stato utile?

Soluzione

Si scopre che il server stavo richiedendo l'immagine invio content-type "image/jpg" E per impostazione predefinita AFNetWorking non supporta questo tipo di file.

Ho cambiato il metodo di classe in AfimagereQuestOperation per sembrare:

+ (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 ha risolto il mio problema.

Altri suggerimenti

Puoi riuscire ad accettare cosa content-type vuoi con questa biblioteca semplicemente cambiando il request come questo:

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

E chiama 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 sarai in grado di sovrascrivere il content-type senza cambiando la biblioteca.

AfnetWorking non supporta Tipo MIME immagine/jpg Per impostazione predefinita.

Puoi supportarlo senza modificare la libreria AFNETWorking

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

Tutte le operazioni che manipolano l'interfaccia utente devono essere eseguite sul thread principale. Quindi potrebbe essere necessario utilizzare 'PerformSelectorOnMainthread:' Quando si ricaricano i dati di tabella nel blocco di completamento.

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

Ho avuto un problema simile, ma si è scoperto che stavo passando un URL che conteneva spazi. Quando ho codificato correttamente l'URL usando stringByAddingPercentEscapesUsingEncoding: Le immagini ora caricano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top