2010-08-01 15 views
9

Estoy intentando cargar algunas imágenes en celdas de tabla de forma asincrónica usando ASINetworkQueue. Simplemente no puedo entenderlo y no puedo encontrar un buen ejemplo SIMPLE.¿Cómo? UITableViewCell con UIImageView cargado de forma asíncrona a través de ASINetworkQueue

Lo mejor que puedo encontrar es esto, pero es sólo totalmente exagerado y un poco demasiado complicado para mí: http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/

¿Alguien más tiene algún consejo/soluciones/código para hacer esto con la biblioteca ASIHTTPRequest?

Respuesta

20

Aquí hay una clase derivada de UIImageView que uso, quizás esto te ayude. (! En realidad he simplificado esto un poco justo de lo que yo uso, pero eso fue lo que pidió)

Archivo de cabecera, UIHTTPImageView.h:

#import "ASIHTTPRequest.h" 

@interface UIHTTPImageView : UIImageView { 
    ASIHTTPRequest *request; 
} 

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

@end 

y 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

Esto parece exactamente lo que estoy buscando. Sin embargo, tengo una pregunta: Dado que no está utilizando una "cola de red" si el número de filas en la tabla es realmente grande, ¿no se sobrecargará? –

+1

Está utilizando la cola compartida de ASIHTTPRequest, que de forma predeterminada hará 8 descargas simultáneas como máximo. Puede reducir esto con algo como [[ASIHTTPRequest sharedQueue] setMaxConcurrentOperations: 2] si lo desea. (Nota: necesita la última versión de asihttprequest desde git, v1.7 y anterior, no exponga la línea compartida.) – JosephH

+2

¡Gracias de nuevo por su ayuda! ¡Gente como tú hace que StackOverflow sea increíble! –

Cuestiones relacionadas