2013-05-04 5 views
5

Desidero impostare le immagini di celle tableview in una delle mie app. Io uso AFNetworking (1.2.1) e lo faccio con setImageWithURLRequest.AFNetworing - setImageWithURLRequest non funziona

Il mio codice in cui ho impostato immagini assomiglia a questo:

if (user.avatar) { 
     NSString *imageUrl = user.avatar.url; 

     [cell.profileImage setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
      [cell setNeedsLayout]; 
     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 
      NSLog(@"Error: %@", error); 
     }]; 
    } 

mio errore restituisce log questo:

Error: Error Domain=NSURLErrorDomain Code=-999 "The operation couldn’t be completed. (NSURLErrorDomain error -999.)" UserInfo=0x1f5b56a0 {NSErrorFailingURLKey=https://d2rfichhc2fb9n.cloudfront.net/image/5/Cf7T_BA6- NFGL5ah0w4hdvmk_Vp7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvZTIvM2MvMjA vZTIzYzIwMDAwMDAwMDAwMC5qcGciLCJvIjoiIn0} 

E le immagini dosn't da impostare. Non ho avuto questo problema prima di essere aggiornato a AFNetworking (1.2.1). Qualche idea?

Aggiornamento

Ho cercato di togliere gli spazi dal URL come questo:

NSString *imageUrl = [user.avatar.url stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

Ma ottengo lo stesso errore. E potrebbe essere pericoloso se l'API a volte conterrebbe un nome file immagine che contiene spazi bianchi.

risposta

20

vedo tre problemi:

  1. -999 mezzi NSURLErrorCancelled, così sembra che la URLRequest viene cancellato in qualche modo. Dov'è questo tuo codice? È possibile che l'oggetto cell o lo profileImage venga rilasciato prematuramente?

  2. Le versioni più recenti di AFNetworking richiedono di impostare l'immagine da soli se si sta definendo un blocco di successo.

  3. Assicurarsi che l'URL sia valido.

Prova questo (lavori, quando sono immessi in tableView:cellForRowAtIndexPath:):

__weak UITableViewCell *weakCell = cell; 
[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 
    if (weakCell) 
    { 
     weakCell.imageView.image = image; 
     [weakCell setNeedsLayout]; 
    } 
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
+1

Grazie, ha funzionato! Spostato su 'tableView: cellForRowAtIndexPath'. – Anders

+0

la tua risposta mi ha salvato la giornata .... Grazie .... – Manoj

+0

Questo codice crea il ciclo di conservazione ?? Sono sicuro che il blocco manterrà la cella, ma la cella mantiene il blocco ???? –

4

Sembra che ci siano un po 'di spazio in più nel vostro url

l'URL è https://d2rfichhc2fb9n.cloudfront.net/image/5/Cf7T_BA6- NFGL5ah0w4hdvmk_Vp7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvZTIvM2MvMjA vZTIzYzIwMDAwMDAwMDAwMC5qcGciLCJvIjoiIn0

Url Without Space

A causa dello spazio aggiuntivo l'URL dell'immagine non è valido e non è sempre inverosimile.

EDIT

NSString *strCorrectUrl = [user.avatar.url stringByReplacingOccurrencesOfString:@" " 
           withString:@""]; 
+0

provato a spogliare gli spazi, ma non ha aiutato. Vedi risposta aggiornata. – Anders