ios - 在 iOS 中重启后尝试从本地路径加载图像失败

标签 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")!
}

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

最佳答案

明白了,我的问题是我保存的完整路径似乎是错误的。最好只保存图像名称。

这是保存方法

 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/

相关文章:

ios - 拒绝 Codesign 访问钥匙串(keychain)后,Xcode 不允许为设备构建

ios - AVPlayer 无法将类型的值分配给类型

objective-c - OpenGL ES 在移动背景时崩溃,iOS 5.1

ios - 在 ios 浏览器中播放 flash 视频

ios - 如何在地幔中将字符串转换为原始类型?

ios - 界面生成器 : cannot assign custom class to table view controller

快速获取tableview单元格的所有值

iphone - 如何检查用户的 iOS 设备是否支持蓝牙点对点连接

iphone - 通过网络分发 mobileconfig 文件

iphone - 什么是 iOS 测试应用程序分发的临时证书?