我試圖用Swift顯示和保存圖像。在第一次點擊時,它在imageview上顯示遠程圖像,第二次點擊它顯示空白imageview,而不是它應該是第一次點擊時保存的本地圖像。如何使用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
}
}
編輯:這一個爲我工作。
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
}
}
}
謝謝,我將它改爲UIImage(contentsOfFile:imagePath)。但是當我將dispatch更改爲dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0))時,它甚至不顯示遠程圖像。 – bilmiyore 2014-10-09 19:07:09
我剛剛看到編輯您的代碼...我會更新我的答案。 – 2014-10-09 19:10:06
謝謝,我認爲派遣現在效果更好。但仍然無法在本地加載圖像。我認爲「var imagePath = paths.stringByAppendingPathComponent(」images/\(id)/logo.jpg「)」是問題,因爲「if block」根本不顯示。 – bilmiyore 2014-10-09 19:24:52