我正在使用此代码在设备上存储图像(使用 Swift 1.2/iOS 8)
func saveImageLocally(imageData:NSData!) -> String{
let time = NSDate().timeIntervalSince1970
let fileManager = NSFileManager.defaultManager()
let dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0].stringByAppendingPathComponent(subDirForImage) as String
if !fileManager.fileExistsAtPath(dir) {
var error: NSError?
if !fileManager.createDirectoryAtPath(dir, withIntermediateDirectories: true, attributes: nil, error: &error) {
println("Unable to create directory: \(error)")
return ""
}
}
let path = dir.stringByAppendingPathComponent("spot\(Int(time)).png")
imageData.writeToFile(path, atomically: true)
println(UIImage(contentsOfFile: path))
return path
}
这很好用,因为如果我观察模拟器的文件系统,我可以在 println 和 Finder 中看到图像。
在模拟器(或 iPhone,这是相同的行为)中重新启动我的应用程序后,我尝试像这样读取图像:
func loadImageFromLocalStore(path: String) -> UIImage{
if(!path.isEmpty){
let image = UIImage(contentsOfFile: path)
if(image != nil){
return image!;
}
}
return UIImage(named: "noImage.png")!
}
但是这里无法获取图片。它总是零。但是:路径没有改变,而且我仍然在文件系统中看到图像。
最佳答案
明白了,我的问题是我保存的完整路径似乎是错误的。最好只保存图像名称。
这是保存方法
func saveImageLocally(imageData:NSData!) -> String{
let time = NSDate().timeIntervalSince1970
let fileManager = NSFileManager.defaultManager()
let dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0].stringByAppendingPathComponent(subDirForImage) as String
if !fileManager.fileExistsAtPath(dir) {
var error: NSError?
if !fileManager.createDirectoryAtPath(dir, withIntermediateDirectories: true, attributes: nil, error: &error) {
println("Unable to create directory: \(error)")
return ""
}
}
let pathToSaveImage = dir.stringByAppendingPathComponent("spot\(Int(time)).png")
imageData.writeToFile(pathToSaveImage, atomically: true)
return "spot\(Int(time)).png"
}
这是读取方法
func loadImageFromLocalStore(imageName: String) -> UIImage{
let fileManager = NSFileManager.defaultManager()
let dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0].stringByAppendingPathComponent(subDirForImage) as String
let path = dir.stringByAppendingPathComponent(imageName)
if(!path.isEmpty){
let image = UIImage(contentsOfFile: path)
println(image);
if(image != nil){
return image!;
}
}
return UIImage(named: "noImage.png")!
}
最佳 基督徒
关于ios - 在 iOS 中重启后尝试从本地路径加载图像失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30828362/