Sto provando a visualizzare e salvare le immagini con Swift. Al primo colpo, mostra l'immagine remota su imageview, al secondo colpo mostra un'immagine vuota invece di un'immagine locale che viene salvata al primo colpo.Come salvare un'immagine remota con Swift?
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var imagePath = paths.stringByAppendingPathComponent("images/\(id)/logo.jpg")
var checkImage = NSFileManager.defaultManager()
if (checkImage.fileExistsAtPath(imagePath)) {
let getImage = UIImage(contentsOfFile: imagePath)
self.image?.image = getImage
} else {
dispatch_async(dispatch_get_main_queue()) {
let getImage = UIImage(data: NSData(contentsOfURL: NSURL(string: remoteImage)))
UIImageJPEGRepresentation(getImage, 100).writeToFile(imagePath, atomically: true)
self.image?.image = getImage
}
}
Modifica: questo ha funzionato per me.
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
var dirPath = paths.stringByAppendingPathComponent("images/\(id)")
var imagePath = paths.stringByAppendingPathComponent("images/\(id)/logo.jpg")
var checkImage = NSFileManager.defaultManager()
if (checkImage.fileExistsAtPath(imagePath)) {
let getImage = UIImage(contentsOfFile: imagePath)
self.image?.image = getImage
} else {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
checkImage.createDirectoryAtPath(dirPath, withIntermediateDirectories: true, attributes: nil, error: nil)
let getImage = UIImage(data: NSData(contentsOfURL: NSURL(string: remoteImage)))
UIImageJPEGRepresentation(getImage, 100).writeToFile(imagePath, atomically: true)
dispatch_async(dispatch_get_main_queue()) {
self.image?.image = getImage
return
}
}
}
Grazie, l'ho cambiato in UIImage (contentsOfFile: imagePath).Ma quando cambio dispatch in dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) non viene visualizzata alcuna immagine remota. – bilmiyore
Ho appena visto la modifica del tuo codice ... aggiornerò la mia risposta. –
Grazie, penso che la spedizione funzioni meglio ora. Ma ancora non riesco a caricare le immagini localmente. Penso che "var imagePath = paths.stringByAppendingPathComponent (" images/\ (id) /logo.jpg ")" è il problema perché "se il blocco" non viene visualizzato affatto. – bilmiyore