2010-08-01 8 views
9

J'essaie de charger des images dans des cellules de manière asynchrone en utilisant ASINetworkQueue. Je ne peux tout simplement pas comprendre et ne peux pas sembler trouver un bon exemple SIMPLE.Comment? UITableViewCell avec UIImageView chargé de manière asynchrone via ASINetworkQueue

Le meilleur que je peux trouver est, mais son juste totalement surpuissant et un peu trop compliqué pour moi: http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/

Est-ce que quelqu'un d'autre a des conseils/solutions/code pour ce faire avec la bibliothèque ASIHTTPRequest?

Répondre

20

Voici une classe dérivée de UIImageView que j'utilise, peut-être que cela vous aidera. (! En fait, j'ai simplifié ce juste un peu de ce que je l'utilise, mais c'est ce que vous avez demandé)

fichier d'en-tête, UIHTTPImageView.h:

#import "ASIHTTPRequest.h" 

@interface UIHTTPImageView : UIImageView { 
    ASIHTTPRequest *request; 
} 

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

@end 

et 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

Cela semble exactement ce que je cherche. J'ai une question cependant: Puisqu'il n'utilise pas une "file d'attente de réseau" si le nombre de rangées dans la table est vraiment grand, ne le surchargera-t-il pas? –

+1

Il utilise la file d'attente partagée ASIHTTPRequest, qui par défaut effectuera 8 téléchargements simultanés au maximum. Vous pouvez réduire cela avec quelque chose comme [[ASIHTTPRequest sharedQueue] setMaxConcurrentOperations: 2] si vous le souhaitez. (Note: nécessite la dernière version de asihttprequest de git, v1.7 et plus tôt n'expose pas la file d'attente partagée.) – JosephH

+2

Merci encore pour votre aide! Des gens comme vous rendent StackOverflow génial! –