NSFileManager无法保存-没有这样的文件或目录

时间:2019-02-11 06:42:24

标签: swift macos alamofire nsfilemanager

我正在使用'AlamoFireImage'下载图像文件。

然后,我使用List<Data>NSFileManager方法将它们保存在目录中。

但是当我尝试检索保存的图像时,它仅返回第一个文件。虽然它应该已经保存了15张图片。

  

这是我保存图像文件的功能:

CreateFile
  

这是我下载它们的功能:

func getImage(url: String) {
    Alamofire.request("https://www.tandori.ir/uploads/categories/" + url).responseImage { (response) in
        if response.result.value != nil {
            do {
                let fileManager = FileManager.default
                let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(url)
                let image = UIImage(named: url)
                let imageData = image?.jpegData(compressionQuality: 0.2)
                fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)
                print(paths)
            }
            catch let error as NSError {
                print(error)
            }
        }

    }
}

当我尝试检索保存的图像时,我在Console上收到此错误:

  

“ BOMStream BOMStreamWithFileAndSys(int,off_t,size_t,int,char *,BomSys *):读取:没有这样的文件或目录”

我正在尝试在收藏夹视图中显示这些图像。

  

这是我在ViewController中的代码:

func launchApp() {
    let imgTitiles = UserDefaults.standard.array(forKey: "imgsArray")!
    for pic in imgTitiles {
        self.getImage(url: pic as! String)
        print("done")
    }
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    let resultViewController = storyBoard.instantiateViewController(withIdentifier: "mainTab") as! TandoriTabView
    self.present(resultViewController, animated: true)
}

似乎是什么问题?

谢谢!

1 个答案:

答案 0 :(得分:-1)

实际上,您使用Alamofire下载图像是异步进行的。因此,在显示ViewController时,您只有很少的图像。在下面的代码中,将您的代码同步修改为getImage()。希望它对您有用。

func getImage(url: String) {
   if let image = UIImage(named: url) {
   let fileManager = FileManager.default
   let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(url)
   let imageData = image?.jpegData(compressionQuality: 0.2)
            fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil)
            print(paths)
 }
}