2010-06-10 21 views
6

मैं अपने अनुप्रयोग में एक UITableView जिसमें मैं NSDocumentDirectory से कई छवियों को लोड कर सकते है। यह काम करता है, लेकिन जब ऊपर और नीचे स्क्रॉल और, अनुप्रयोग एक सा है, सबसे अधिक है क्योंकि छवियों मुख्य थ्रेड में परोसा जा रहा है, प्रभावी रूप से स्क्रॉल जब तक यह भरा हुआ है से tableView अवरुद्ध होने की संभावना को फ्रीज करने लगता है। मेरी समस्या यह है कि मुझे नहीं पता कि बाद में उन्हें लोड करना, एक "आलसी लोड" सुविधा, स्क्रॉल करते समय।लेज़ी लोड छवियों?

यह कोड स्निपेट अब छवियों को लोड करने के लिए प्रयोग किया जाता है:

imagesPath = [NSString stringWithFormat:@"%@/images/", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; 
if ([fileManager fileExistsAtPath:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%d.png", rowID]]]) { 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%d.png", rowID]]]; 
    // If image contains anything, set cellImage to image. If image is empty, use default, noimage.png. 
    if (image != nil){ 
     // If image != nil, set cellImage to that image 
     cell.cellImage.image = image; 
    } 
    [image release]; 
} 

सबसे अच्छा तरीका है करने के लिए "आलसी लोड" प्रत्येक कोशिका में छवियों स्क्रॉल में चल से बचने के लिए क्या है?

उत्तर

7

SDWebImage भंडार पर एक नजर डालें। यह एसिंक्रोनस छवि लोडिंग करने के लिए सबकुछ प्रदान करता है।

अद्यतन

मैं सिर्फ देखा README में कुछ लेखन-त्रुटियों है कि वहाँ है, तो एक स्थानीय फ़ाइल अपेक्षा के अनुरूप काम नहीं हो सकता है डाउनलोड करने।

यहां कुछ नमूना कोड है। दृश्य नियंत्रक एक UIImageView आउटलेट है और image.jpg फ़ाइल को लोड करना चाहता है।

- (IBAction)loadImage:(id)sender { 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *destPath = [documentsDirectory stringByAppendingPathComponent:@"image.jpg"]; 
    NSURL *url = [NSURL fileURLWithPath:destPath]; 
    UIImage *cachedImage = [manager imageWithURL:url]; 
    if (cachedImage) 
    { 
     imageView.image = cachedImage; 
    } 
    else 
    { 
     // Start an async download 
     [manager downloadWithURL:url delegate:self]; 
    }  
} 

- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image 
{ 
    imageView.image = image; 
} 
+0

मैं एक छवि डाउनलोड करने के लिए कोशिश नहीं कर रहा हूँ, मैं NSDocumentDirectory से एक छवि में लोड करने के लिए कोशिश कर रहा हूँ: यह SDWebImageManagerDelegate प्रोटोकॉल लागू करता है। – Emil

+0

डाउनलोड करना NSURL द्वारा समर्थित किसी भी संसाधन तक पहुंचने के रूप में समझा जाना चाहिए। NSRL का उपयोग कई प्रोटोकॉल के लिए किया जा सकता है: http, FTP या फ़ाइल। आपको NSRL पर पथ बदलें और अपनी स्थानीय फ़ाइल "डाउनलोड करें"। –

+0

मैं कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है! 'फ़ाइल: // var/मोबाइल/आवेदन/RANDOMIDENTIFIER/दस्तावेज़/छवियों/10.png' NSURL एक स्ट्रिंग से भरी हुई है। – Emil

संबंधित मुद्दे