2013-04-28 15 views
14

Ho appena cambiato il mio codice per la memorizzazione nella cache delle immagini da EGOImageCache a SDWebView. Purtroppo non so come impostare intestazioni HTTP personalizzate in quanto devo inviare l'autenticazione per essere in grado di recuperare le immagini. È stato fatto facilmente con EGOImageCache poiché ho esteso NSURLRequest nel posto appropriato. Ma non so come farlo con SDWebView.framework. Vedo le intestazioni e Ive trovato metodi SDWebImageDownloader.h contenenteSDWebImage e impostazione di intestazioni HTTP personalizzate?

/** 
* Set a value for a HTTP header to be appended to each download HTTP request. 
* 
* @param value The value for the header field. Use `nil` value to remove the header. 
* @param field The name of the header field to set. 
*/ 
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field; 

/** 
* Returns the value of the specified HTTP header field. 
* 
* @return The value associated with the header field field, or `nil` if there is no corresponding header field. 
*/ 
- (NSString *)valueForHTTPHeaderField:(NSString *)field; 

Sembra che il lib supporta intestazioni HTTP. Ma come io uso UIImageView + WebCache.h non riesco a vedere lì un'opzione per l'impostazione delle intestazioni. Nel mio codice che io chiamo

[self.imageView setImageWithURL:[NSURL URLWithString:themeImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Qualcuno può dirmi come impostare intestazioni HTTP?

risposta

38

Ho avuto lo stesso problema, e ho cercato di fare:

SDWebImageDownloader *manager = [SDWebImageDownloader sharedDownloader]; 
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"]; 

di testa che però non sono state inviate. Dopo alcuni tentativi, ho trovato il problema, SDWebImageDownloader su sharedDownloader crea una nuova istanza di SDWebImageDownloader, quindi quando si inserisce l'intestazione in quell'istanza, l'istanza che scarica realmente l'immagine non ha l'intestazione.

ho risolto facendo questo:

SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader; 
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"]; 
+0

lo proverò. Grazie per la risposta! sembra che non siano molti gli sviluppatori che hanno bisogno di questa funzionalità. – rockstarberlin

+1

Tu signore meriti più voti. Questa risposta è corretta al 100% e il codice originale è contro-intuitivo. – Emilio

+4

Perché, dio? Perché questo SDK funziona in questo modo? Perché? – d512

2

Lo so che è piuttosto vecchio, ma non potevo fare di condividere ciò che ha funzionato per me. Avevo bisogno di impostare un valore di token di accesso per l'intestazione logintoken. Quindi, questo pezzo di codice ha fatto quello che volevo -

NSString *loginToken = // Some method to fetch login token  
[SDWebImageDownloader.sharedDownloader setValue:loginToken forHTTPHeaderField:@"logintoken"]; 
2

Sto usando l'autenticazione di base e l'impostazione del username e password sul sharedDownloader aiutato:

SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader]; 
downloader.username = @"username"; 
downloader.password = @"password"; 
0

Swift versione

let imageDownloader = SDWebImageDownloader.shared() 
imageDownloader.setValue("Username", forHTTPHeaderField: "X-Oauth-Username")