Проблема с загрузкой файла с диска

Хорошо, так что это заставило меня почесать голову некоторое время.

У меня есть файл png, который я записываю на диск. Я получаю данные:

let data = UIImagePNGRepresentation(scaledImage!)
let filename = getDocumentsDirectory().appendingPathComponent("\(record.uid!).png")

Я делаю попытку поймать, и все, кажется, работает. Полученное имя файла:

file:///var/mobile/Containers/Data/Application/C6B796E8-2DB6-45A4-9B18-EF808B8CA3CA/Documents/580420d51800cd826a7e217c.png

Проблема возникает, когда я пытаюсь загрузить это изображение обратно с диска.

Когда я получаю список всех файлов в каталоге документов, я получаю:

[file:///private/var/mobile/Containers/Data/Application/C6B796E8-2DB6-45A4-9B18-EF808B8CA3CA/Documents/580420d51800cd826a7e217c.png]

Единственная разница, которую я вижу, это «частная» часть пути к файлу. Когда я пытаюсь проверить, существует ли файл, используя путь к файлу, который я возвращаю, добавляя имя файла (тот, который без частной части), я получаю false.

Что мне не хватает?


person Ron Dear    schedule 23.10.2016    source источник
comment
Вам помогло, в моем случае сработало нормально   -  person Rajan Maheshwari    schedule 23.10.2016


Ответы (1)


Код Swift 3/4

Предположим, что метод getDocumentsDirectory() определен следующим образом

func getDocumentsDirectory() -> URL {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let documentsDirectory = paths[0]
        return documentsDirectory
}

Для того, чтобы сохранить изображение

let data = UIImagePNGRepresentation(scaledImage!)
let filename = getDocumentsDirectory().appendingPathComponent("\(record.uid!).png")
try? data?.write(to: filename)

И ваше изображение сохраняется в каталоге документов

Теперь, чтобы загрузить его обратно

let imagePath = getDocumentsDirectory().appendingPathComponent("\(record.uid!).png").path

let fileManager = FileManager.default
if fileManager.fileExists(atPath: imagePath){
    print("Image Present")
    //load it in some imageView
}else {
    print("No Image")
}
person Rajan Maheshwari    schedule 23.10.2016
comment
Вы упускаете суть. Распечатайте URL-адреса в своем коде, и вы увидите проблему: в imagePath нет ведущего частного. - person Jeyhey; 26.10.2017
comment
ОП не опубликовал тело своей функции getDocumentsDirectory(), поэтому я предположил то же самое. Мои URL-адреса: Протестировано на устройстве -- Печать описания имени файла: "///var/mobile/Containers/Data/Application/46B10A6C-43EE-4D11-83E5-88B6ADF1E646/Documents/testImage.png" Печать описания пути к изображению: "/var/mobile/Containers/Data/Application/46B10A6C-43EE-4D11-83E5-88B6ADF1E646/Documents/testImage.png" Итак, я считаю, что в теле функции getDocumentsDirectory() есть какая-то проблема, из-за которой URL-адрес ведет к частному при извлечении изображения обратно. Это было предположение. - person Rajan Maheshwari; 27.10.2017