2013-06-13 6 views
5

Ich verwende SDWebImage-Bibliothek, um Bilder und von einem Webdienst asynchron herunterzuladen und zwischenzuspeichern. Im Anschluss an die Methode i die Bilder herunterladen verwenden:SDWebImage UITableView Zelle Bilder nicht beibehalten

- (void) downloadThumbnails:(NSURL *)finalUrl 
{ 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
    [manager downloadWithURL:finalUrl 
        options:0 
        progress:nil 
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) 
    { 
     if (image) 
     { 
      [self setThumbnail:image]; 
     } 
    }]; 

} 

Es wird erfolgreich die Bilder aus dem Web-Dienst heruntergeladen und in der Tableview zeigt. Die Bilder werden jedoch nicht zwischen den Anwendungsläufen gespeichert. Gibt es noch etwas, was ich tun muss, um die Bilder zwischenzuspeichern?

UPDATE: FREUNDLICH NICHT vorschlagen Folgendes zu verwenden:

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
        placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

Da die Struktur meines Programms unterscheidet. Zweitens, wenn Sie die Beschreibung der SDWebImage-Bibliothek HERE lesen, werden Sie wissen, dass sie so verwendet werden kann, wie ich sie mit SDWebImageManager verwende.

+0

Geben Sie den cellForRow-Methodencode – Durgaprasad

+0

@Durgaprasad ein Es gibt keinen SDWebImage-Code in cellForRowAtIndexPath. Tun Sie dies einfach cell.thumbContainer.image = [item thumbnail]; – AJ112

+0

geben Sie diesen Methodencode – Durgaprasad

Antwort

2

Ich vermute, dass der Grund, warum der Cache-Mechanismus in SDWebImage nicht korrekt in diesem speziellen Fall arbeitet mit, weil sie auf der Basis Bild URL.

Also, wenn Sie einfach herunterladen image und zuweisen, um einige der Eigenschaft Ihres Objekts (wie Sie es zuweisen thumbnail), wenn Sie später auf diese Eigenschaft zugreifen, wenn Sie einfach um den Cache-Mechanismus gehen.

Was könnten Sie die Struktur des Programms zu halten zu tun ist:

  1. speichern die thumbnailURL in Ihrem self Objekt;

  2. Wenn Sie das Bild zum ersten Mal herunterladen, rufen Sie SDWebImageManagerdownloadWithURL: Methode wie Sie tun; Dadurch wird auch das Bild im Cache gespeichert. (dies tun Sie bereits gemäß Ihrem obigen Code)

  3. make thumbnail Eine schreibgeschützte Eigenschaft, die auf den Cache zugreift, der das mit thumbnailURL verknüpfte Bild abruft.

Dies ist die geringste Menge an Änderungen, die Sie vornehmen sollten.

- (UIImage*)thumbnail { 

    return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL]; 
} 

wo self.thumbnailURL eine andere Eigenschaft in Ihrem Objekt ist, wo Sie die Bild-URL speichern:

eine Implementierung der Nur-Lese-Eigenschaft Dies könnte bei Punkt 3 beschrieben werden.

Hoffe, das hilft.

+0

Zunächst einmal danke für die Antwort. Punkt 1 und 2 in Ihrer Antwort braucht eine kleine Erklärung, wenn Sie Code, der groß wäre, weil von der Theorie ich denke, mein Programm bereits implementiert diese beiden Punkte oder möglicherweise falsch sein würde. T – AJ112

+0

Bitte, siehe meine Bearbeitung. Wenn du bereits 1 und 2 machst, brauchst du nur Punkt 3 - jetzt sollte es klarer sein, hoffe ich. – sergio

+0

Vielen Dank! Es ist fertig! – AJ112

1

Ich denke, Sie sind auf dem falschen Weg.

Wenn Sie SDWebImage für UITableView Than Do Following verwenden möchten.

1.Importieren UIImageView + WebCache.h durch folgende Anweisung, wobei u haben UITableView

#import <SDWebImage/UIImageView+WebCache.h>

2.Write folgende Zeile in cellForRowAtIndexPath Methode der UITableView

[cell.Logo setImageWithURL: finalUrl placeholderImage:[UIImage imageNamed:@"imagename.png"] options:SDWebImageRefreshCached];

  • Ersetzen Sie LOGO durch den Namen Ihrer Bildansicht in UITableViewCell
  • imagename.png ist der Name des Bildes im Projekt, das angezeigt wird, bis das Bild nicht aus dem Internet geladen wird.

Kommentieren Sie hier, wenn Sie irgendein Problem haben.

Alles Gute

+0

Bitte überprüfen Sie das UPDATE in meiner Frage. Vielen Dank! – AJ112

+0

OK. Wie findest du, dass das Bild nicht im Cache ist? – CRDave

+0

Wenn ich die App schließe und erneut starte. Die Bilder zeigen nicht, dass sie nicht auf Festplatte gespeichert werden – AJ112

0

i die folgende Methode bevorzugen für asynchrone Bilder zum Herunterladen in Tableview.
Eigentlich müssen Sie nicht SDWebImageManager selbst behandeln.

[cell.imageView setImageWithURL:[NSURL URLWithString:@"IMAGE_URL"]]; 
[cell.imageView setImageWithURL:[NSURL URLWithString:@"IMAGE_URL"] placeholderImage:[UIImage imageNamed:@"LOCAL_IMAGE_NAME"]]; 

Stellen Sie sicher, dass die UIImageView+WebCache.h in Ihrer Implementierung importiert. Das oben genannte asynchrone Laden von Bildern ist auch für die Kategorie UIButton+WebCache.h und MKAnnotationView+WebCache.m verfügbar.

Die neue Version von SDWebImage unterstützt auch die GIF-Animation UIImage+GIF.h Kategorie
https://github.com/rs/SDWebImage

+0

Bitte überprüfen Sie das UPDATE in meiner Frage. Natürlich habe ich den Header und Rest Ihrer Antwort über GIF-Animation importiert, ist nicht mit meiner Frage verwandt. Danke – AJ112