2010-08-01 12 views
9

Sto provando a caricare alcune immagini nelle celle della tabella in modo asincrono utilizzando ASINetworkQueue. Non riesco proprio a capirlo e non riesco a trovare un buon esempio SIMPLE.Come? UITableViewCell con UIImageView caricato in modo asincrono tramite ASINetworkQueue

Il meglio che posso trovare è questo, ma il suo solo totalmente eccessivo e un po 'troppo complicato per me: http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/

Qualcun altro ha qualche consiglio/soluzioni/code per fare questo con la libreria ASIHTTPRequest?

risposta

20

Ecco una classe derivata da UIImageView che uso, forse questo ti aiuterà. (! In realtà ho semplificato questo un bel po 'da quello che io uso, ma era quello che hai chiesto)

file di intestazione, UIHTTPImageView.h:

#import "ASIHTTPRequest.h" 

@interface UIHTTPImageView : UIImageView { 
    ASIHTTPRequest *request; 
} 

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; 

@end 

e UIHTTPImageView.m:

#import "UIHTTPImageView.h" 

@implementation UIHTTPImageView   

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder { 
    [request setDelegate:nil]; 
    [request cancel]; 
    [request release]; 

    request = [[ASIHTTPRequest requestWithURL:url] retain]; 
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

    if (placeholder) 
     self.image = placeholder; 

    [request setDelegate:self]; 
    [request startAsynchronous]; 
} 

- (void)dealloc { 
    [request setDelegate:nil]; 
    [request cancel]; 
    [request release]; 
    [super dealloc]; 
} 

- (void)requestFinished:(ASIHTTPRequest *)req 
{ 

    if (request.responseStatusCode != 200) 
     return; 

    self.image = [UIImage imageWithData:request.responseData]; 
} 

@end 
+0

Questo sembra esattamente quello che sto cercando. Ho una domanda però: Dato che non sta usando una "coda di rete" se il numero di righe nella tabella è veramente grande, non sovraccaricherà? –

+1

Sta usando la coda condivisa di ASIHTTPRequest, che per impostazione predefinita farà 8 download simultanei al massimo. Puoi ridurlo con qualcosa come [[ASIHTTPRequest sharedQueue] setMaxConcurrentOperations: 2] se lo desideri. (Nota: l'ultima versione di asihttprequest da git, v1.7 e precedenti non espone la sharedqueue). – JosephH

+2

Grazie ancora per il tuo aiuto! Persone come te rendono StackOverflow fantastico! –

Problemi correlati