NSFileManager не удается сохранить - нет такого файла или каталога - PullRequest
0 голосов
/ 11 февраля 2019

Я использую «AlamoFireImage» для загрузки файлов изображений.

И после этого я использую NSFileManager и CreateFile метод для сохранения их в каталоге.

Нокогда я пытаюсь получить сохраненные изображения, он возвращает только первый файл.Хотя он должен был сохранить 15 изображений.

Вот моя функция для сохранения файлов изображений:

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)
            }
        }

    }
}

И это моя функция для их загрузки:

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)
}

Когда я пытаюсь получить сохраненные изображения, я получаю эту ошибку на консоли:

"BOMStream BOMStreamWithFileAndSys (int, off_t, size_t, int, char *), BomSys *): read: Нет такого файла или каталога "

Я пытаюсь показать эти изображения в виде коллекции.

Вот мой код в моем ViewController:

//Get Images Directory Path Function.
func getDirectoryPath() -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}


//Get Images Function.
func getImage(name : String) -> String {
    _ = FileManager.default
    let imagePAth = (self.getDirectoryPath() as NSString).appendingPathComponent(name)

    return imagePAth

}

 //Show Images in collectionView cells function.
 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = categoriesCollection.dequeueReusableCell(withReuseIdentifier: "categories", for: indexPath) as! categoriesCell
    let imageAddress = getImage(name: imgTitiles[indexPath.row] as! String) //TheRealShit
    cell.categoryImage.image = UIImage(contentsOfFile: imageAddress)
    return cell
}

В чем проблема?

Заранее спасибо!

1 Ответ

0 голосов
/ 11 февраля 2019

На самом деле вы используете 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)
 }
}
...