2017-07-07 4 views
0

Ich möchte Bild und einige Daten von JSON zu persistent speichern Ich weiß, Alamofire Image hat seine eigene Chade-Methode, aber ich denke, nur während App lebt, wenn App geschlossen und wieder geöffnet Chache ist so geklärt, so ich muss erneut Bild herunterladen. so , wenn mein Bild sind Downloads wie soAlamofireImage herunterladen in CoreData

image.af_setImage(withURL: url) 

es posible

imageEntity.save(image.image) 

nicht genau, Code zu speichern, aber die Idee ist, das Bild zu speichern einen Satz zu Bild in Coredata heruntergeladen. und jede Idee, die hinter der Logik dieses Ansatzes cjeck wenn Bild in Coredata existiert und von der Show, wenn nicht und Coredata

+0

Ich bin mir ziemlich sicher, dass AF Bildcache nicht gelöscht wird, wie Sie beschreiben. –

+0

Verwenden Sie besser https://github.com/rs/SDWebImage, da es flexiblere Caching-Optionen bietet. – ninjaproger

Antwort

0

Coredata ist nicht zu speichern Imagedata oder große Daten (Dateien), sondern nur String entworfen speichern herunterladen, Termine , Ganzzahl ... Genau wie eine normale Datenbank.

Wenn Sie Daten speichern möchten, können Sie AlamofireImageCache verwenden und die Bildkennung in der CoreData-Entität als Zeichenfolge speichern. Es ist der einfachste Weg, es zu tun.

let imageCache = AutoPurgingImageCache(
    memoryCapacity: 100_000_000, 
    preferredMemoryUsageAfterPurge: 60_000_000 
) 
imageCache.add(yourImage, withIdentifier: "YourImageIdentifier") 
imageEntity.identifier = "YourImageIdentifier" 

Dann, wenn Sie Ihr Bild erhalten möchten, können Sie zum Beispiel tun:

let cachedAvatar = imageCache.image(withIdentifier: imageEntity.identifier) 

überprüfen Sie bitte AlamofireImage Dokumentation für weitere Informationen über Cache: https://github.com/Alamofire/AlamofireImage

aktualisieren

Wenn Sie hier Ihren eigenen ImageCache auf der Festplatte erstellen möchten, haben Sie ein Beispiel für das Speichern eines Bild:

func saveImage(image:UIImage){ 

    if let data = UIImagePNGRepresentation(image) { 

      let documentPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]! 
      let filename = documentPath.appendingPathComponent("YourImageName") 
      try? data.write(to: filename) 
    } 
} 

func getImage(ForName name:String) -> UIImage?{ 
    let documentPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]! 
    let filename = documentPath.appendingPathComponent("YourImageName")   
    return UIImage(contentsOf:URL(fileURLWithPath: filename)) 
} 

Hoffe es hilft! Pierre

+0

AutoPurgingImageCache ist In-Memory-Cache, dh es löscht alle zwischengespeicherten Bilder, wenn Sie die App verlassen – ninjaproger

+0

, so wie es persit Form App beenden –

+0

Sie können es nicht dauerhaft machen. Versuchen Sie etwas wie SDWebImage zu verwenden, es hat einen flexibleren Cache, der so konfiguriert werden kann, dass er als in-memory oder persistentes https://github.com/rs/SDWebImage funktioniert. – ninjaproger

Verwandte Themen