iOS:UIImagePNGRepresentation()。writeToFile不写入目标目录

时间:2014-11-20 15:08:41

标签: ios image file swift

使用Swift我尝试从URL下载JPG,然后将该图像保存到文件中,但是当我尝试将其保存到其他目录时,它不会。它将下载到应用程序的Documents文件夹,但是当我尝试将路径设置为另一个子文件夹时则不会。

let dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0].stringByAppendingPathComponent("SubDirectory") as String
let filepath = dir.stringByAppendingPathComponent("test.jpg")
UIImagePNGRepresentation(UIImage(data: data)).writeToFile(filepath, atomically: true)

当我运行它时,它不会将图像保存到它?为什么会这样?我需要事先创建子文件夹吗?

1 个答案:

答案 0 :(得分:7)

有几点想法:

  1. 子目录文件夹是否已存在?如果没有,您必须先创建它。现在建议使用NSURL而不是路径字符串。因此产量:

    let filename = "test.jpg"
    let subfolder = "SubDirectory"
    
    do {
        let fileManager = NSFileManager.defaultManager()
        let documentsURL = try fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
        let folderURL = documentsURL.URLByAppendingPathComponent(subfolder)
        if !folderURL.checkPromisedItemIsReachableAndReturnError(nil) {
            try fileManager.createDirectoryAtURL(folderURL, withIntermediateDirectories: true, attributes: nil)
        }
        let fileURL = folderURL.URLByAppendingPathComponent(filename)
    
        try imageData.writeToURL(fileURL, options: .AtomicWrite)
    } catch {
        print(error)
    }
    
  2. 我建议不要将NSData转换为UIImage,然后将其转换回NSData。如果需要,您可以直接编写原始的NSData对象。

    通过UIImage往返这一过程的过程可能会导致质量和/或元数据丢失,从而可能使得资产变大,等等。通常情况下,应尽可能使用原始NSData。 / p>