在iOS中重新启动后,尝试从本地路径加载图像失败

时间:2015-06-14 10:35:55

标签: ios iphone swift ios8

我使用此代码在设备上存储图像(使用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")!
}

但是这里无法获取图像。它总是零。但是:路径没有改变,我仍然看到文件系统中的图像。

1 个答案:

答案 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")!
  }
最佳

基督教