我使用此代码在设备上存储图像(使用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")!
}
但是这里无法获取图像。它总是零。但是:路径没有改变,我仍然看到文件系统中的图像。
答案 0 :(得分:4)
知道了,我的问题是我保存了看似错误的完整路径。最好只保存图像名称。
现在是保存方法
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")!
}
最佳基督教