Хранение и извлечение изображения с использованием пути к сохраненному файлу в виде строки - PullRequest
0 голосов
/ 25 августа 2018

Я использую Realm и сохраняю путь к файлу для захваченных изображений как String s.Я хочу получить их позже для использования в tableView.Вот мой код для хранения пути к каждому изображению:

func saveImage(imageName: String){
    //create an instance of the FileManager
    let fileManager = FileManager.default
    //get the image path
    thisImagePath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(imageName)
    //get the image taken with camera
    let image = originalCapturedImage
    //get the PNG data for this image
    let data = UIImagePNGRepresentation(image!)
    //store it in the document directory
    fileManager.createFile(atPath: thisImagePath as String, contents: data, attributes: nil)

    print("Picture path at assignment \n")

    print(thisImagePath as Any)

}

А вот код для извлечения изображения:

    ...
var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let documentsPath = paths[0] //Get the docs directory
        let filePath = URL(fileURLWithPath: documentsPath).appendingPathComponent(item.picPath).path
        let image = UIImage(contentsOfFile: filePath)

    print("Picture path at retrieval \n")

    print(item.picPath as Any)


    cell.imageWell.image = image
    cell.imageWell.clipsToBounds = true

    return cell
}

Вот сравнение пути к файлу во время выполнения:

Picture path at assignment 

/var/mobile/Containers/Data/Application/0E9CACAD-C6B3-4F6C-B0DB-72C43AC722E1/Documents/1535219147
...
...
Picture path at retrieval 

/var/mobile/Containers/Data/Application/0E9CACAD-C6B3-4F6C-B0DB-72C43AC722E1/Documents/1535219147

Пути кажутся мне идентичными, но изображение не появляется.Я искал по всему SO, и однажды наткнулся на упоминание об использовании URL для пути к файлу.Так или иначе, я потерял эту запись и не смог найти ее снова.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 25 августа 2018

Вы можете попробовать использовать приведенный ниже код для записи изображения в файл вместо создания файла с содержимым. try? data.write(to: URL(fileURLWithPath: documentsPath))

Вы также можете обратиться к приведенному ниже коду для сохранения изображения.

class func saveImageToFileWithDirectory(_ imageData:Data, fileName:String, folderName : String? = nil) {

    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
    let documentsDirectory = paths.object(at: 0) as! NSString
    let path = documentsDirectory.appendingPathComponent(folderName) as NSString
    if !FileManager.default.fileExists(atPath: path as String) {
        do {
            try FileManager.default.createDirectory(atPath: path as String, withIntermediateDirectories: true, attributes: nil)
        } catch let error as NSError {
            print(error.localizedDescription);
        }
    }
    let imagePath = path.appendingPathComponent(fileName)
    if !FileManager.default.fileExists(atPath: imagePath as String) {
        try? imageData.write(to: URL(fileURLWithPath: imagePath))
    } }

Код для получения изображения выглядит хорошо. Если вам нужна помощь, пожалуйста, оставьте комментарий.

Надеюсь, это решит вашу проблему.

...