2010-08-01 19 views
9

üzerinden eşzamansız olarak yüklenen UITableViewCell, bazı görüntüleri ASINetworkQueue kullanarak eşzamansız olarak tablo hücrelerine yüklemeye çalışıyorum. Ben sadece bunu anlayamıyorum ve iyi bir basit bir örnek bulmak için görünmüyor olabilir.Nasıl? UIImageView UIImageView ile ASINetworkQueue

bulabilirim iyisi bu, ama onun sadece tamamen overkill ve benim için biraz fazla karmaşık: http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/

başkasının ASIHTTPRequest kütüphane ile Bunu yapmak için herhangi ipuçları/çözüm/kod var mı?

cevap

20

Burada kullandığım UIImageView türetilmiş bir sınıf var, belki bu size yardımcı olacaktır. (! Aslında bu kullandığım kadarıyla adil biraz daha basit hale getirdik, ama bu ne için sorulan oldu)

Başlık dosyası, UIHTTPImageView.h:

#import "ASIHTTPRequest.h" 

@interface UIHTTPImageView : UIImageView { 
    ASIHTTPRequest *request; 
} 

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

@end 

ve 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

Bu tam olarak aradığım şey gibi görünüyor. Yine de bir sorum var: Tablodaki satır sayısı çok büyükse, bir "ağ kuyruğu" kullanmadığından aşırı yüklenmeyecek mi? –

+1

ASIHTTPRequest'in paylaşılan kuyruğunu kullanarak, varsayılan olarak en fazla 8 eşzamanlı yükleme yapacak. İsterseniz bunu [[ASIHTTPRequest sharedQueue] setMaxConcurrentOperations: 2] gibi bir şeyle azaltabilirsiniz. (Not: git, v1.7 ve önceki sürümlerinden asihttprequest dosyasının en son sürümüne ihtiyaç duyuyorsunuz. Paylaşılanları sergilemeyin.) – JosephH

+2

Yardımlarınız için tekrar teşekkürler! Senin gibi insanlar StackOverflow'u harika yapıyor! –