将文件从目录加载到 UIMAGE 不起作用
Loading file from Directory to UIIMAGE doesnt work
所以我正在使用 DownloadTask 下载图像,然后将图像保存在缓存目录中并命名为我自己使用:
let fileManager = NSFileManager.defaultManager()
let documents = fileManager.URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: .UserDomainMask).first as NSURL
let fileURL = documents.URLByAppendingPathComponent("\((id)).png")
var error: NSError?
if !fileManager.moveItemAtURL(location, toURL: fileURL, error: &error) {
//already exist?
}
如果我 println fileURL 它将给我:file:///var/mobile/Containers/Data/Application/A5F342C0-DFFA-49C4-92C1-3A0326A8C2D2/Library/Caches/1806.png
然后我尝试加载它 ->
imagechecker.image = UIImage(contentsOfFile:"file:///var/mobile/Containers/Data/Application/A5F342C0-DFFA-49C4-92C1-3A0326A8C2D2/Library/Caches/1806.png")
它不起作用..我看到有人说序列部分可能会随着每次构建而改变,所以我也尝试了这个:
let documents = fileManager.URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: .UserDomainMask).first as NSURL
let fileURL = documents.URLByAppendingPathComponent("1797.png")
imagechecker.image = UIImage(contentsOfFile: fileURL.absoluteString!)
也不好用,有什么想法吗?
您的一般概念是正确的,问题是序列号确实会随着每次构建而改变,因此您必须动态创建它。
您的下载任务不是问题的原因。您尝试加载它的方式是错误的。
如果你将打印缓存目录中的所有文件(使用后续方法),你将看到你保存的文件的名称(应该与上面的 downloadTask 一起使用):
var paths : NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var documentsDirectory : NSString = paths.objectAtIndex(0) as NSString
let fileManager = NSFileManager.defaultManager()
var fileList = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: nil)
for var i = 0 ; i < fileList!.count ; i++ {
var x = fileList![i] as NSString
println(x)
}
*供您使用的额外方法^
为此,我们需要动态创建路径,而不是仅附加名称:
var myPathList : NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var myPath = myPathList[0] as String
myPath = myPath.stringByAppendingPathComponent("filenamexample.png")
imagechecker.image = UIImage(contentsOfFile: myPath)
祝你好运!
所以我正在使用 DownloadTask 下载图像,然后将图像保存在缓存目录中并命名为我自己使用:
let fileManager = NSFileManager.defaultManager()
let documents = fileManager.URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: .UserDomainMask).first as NSURL
let fileURL = documents.URLByAppendingPathComponent("\((id)).png")
var error: NSError?
if !fileManager.moveItemAtURL(location, toURL: fileURL, error: &error) {
//already exist?
}
如果我 println fileURL 它将给我:file:///var/mobile/Containers/Data/Application/A5F342C0-DFFA-49C4-92C1-3A0326A8C2D2/Library/Caches/1806.png
然后我尝试加载它 ->
imagechecker.image = UIImage(contentsOfFile:"file:///var/mobile/Containers/Data/Application/A5F342C0-DFFA-49C4-92C1-3A0326A8C2D2/Library/Caches/1806.png")
它不起作用..我看到有人说序列部分可能会随着每次构建而改变,所以我也尝试了这个:
let documents = fileManager.URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: .UserDomainMask).first as NSURL
let fileURL = documents.URLByAppendingPathComponent("1797.png")
imagechecker.image = UIImage(contentsOfFile: fileURL.absoluteString!)
也不好用,有什么想法吗?
您的一般概念是正确的,问题是序列号确实会随着每次构建而改变,因此您必须动态创建它。
您的下载任务不是问题的原因。您尝试加载它的方式是错误的。 如果你将打印缓存目录中的所有文件(使用后续方法),你将看到你保存的文件的名称(应该与上面的 downloadTask 一起使用):
var paths : NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var documentsDirectory : NSString = paths.objectAtIndex(0) as NSString
let fileManager = NSFileManager.defaultManager()
var fileList = fileManager.contentsOfDirectoryAtPath(documentsDirectory, error: nil)
for var i = 0 ; i < fileList!.count ; i++ {
var x = fileList![i] as NSString
println(x)
}
*供您使用的额外方法^
为此,我们需要动态创建路径,而不是仅附加名称:
var myPathList : NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var myPath = myPathList[0] as String
myPath = myPath.stringByAppendingPathComponent("filenamexample.png")
imagechecker.image = UIImage(contentsOfFile: myPath)
祝你好运!