2010-08-01 13 views
9

के माध्यम से असीमित रूप से लोड किया गया है, मैं ASINetworkQueue का उपयोग करके तालिका कोशिकाओं में कुछ छवियों को लोड करने की कोशिश कर रहा हूं। मैं बस इसे समझ नहीं सकता और एक अच्छा सरल उदाहरण नहीं लग रहा है।कैसे? UIImageView के साथ UITableViewCell ASINetworkQueue

सबसे अच्छा मैं पा सकते हैं इस है, लेकिन इसके बस पूरी तरह से overkill और एक छोटे से भी मेरे लिए जटिल: http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/

किसी और को है ASIHTTPRequest पुस्तकालय के साथ ऐसा करने के लिए कोई सुझाव/समाधान/कोड है?

उत्तर

20

यहां UIImageView से ली गई एक कक्षा है जिसका मैं उपयोग करता हूं, शायद यह आपकी मदद करेगा। (! वास्तव में मैं इस मैं क्या उपयोग से एक निष्पक्ष बिट सरल बना दिया है, लेकिन यह आप के लिए क्या पूछा था)

हैडर फ़ाइल, UIHTTPImageView.h:

#import "ASIHTTPRequest.h" 

@interface UIHTTPImageView : UIImageView { 
    ASIHTTPRequest *request; 
} 

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

@end 

और 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

ऐसा लगता है कि मैं वास्तव में क्या देख रहा हूं। मेरे पास एक प्रश्न है हालांकि: चूंकि यह "नेटवर्क कतार" का उपयोग नहीं कर रहा है, यदि तालिका में पंक्तियों की संख्या वास्तव में बड़ी है, तो क्या यह अधिभारित नहीं होगी? –

+1

यह ASIHTTPRequest की साझा कतार का उपयोग कर रहा है, जो डिफ़ॉल्ट रूप से 8 समवर्ती डाउनलोड करेगा। आप इसे [[ASIHTTPRequest SharedQueue] setMaxConcurrentOperations: 2] जैसे कुछ के साथ कम कर सकते हैं। (नोट: गिट, v1.7 से पहले asihttprequest के नवीनतम संस्करण की आवश्यकता है और पहले साझाक्यू का पर्दाफाश नहीं करते हैं।) – JosephH

+2

आपकी मदद के लिए धन्यवाद! आपके जैसे लोग StackOverflow कमाल बनाते हैं! –