#swift #swift3 #nsfilemanager #nsdocumentdirectory
#swift #swift3 #nsfilemanager #nsdocumentdirectory
Вопрос:
Хорошо, это заставило меня некоторое время ломать голову.
У меня есть файл 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
Проблема возникает, когда я пытаюсь загрузить это изображение обратно с диска.
Когда я получаю список всех файлов в каталоге documents, я получаю:
[file:///private/var/mobile/Containers/Data/Application/C6B796E8-2DB6-45A4-9B18-EF808B8CA3CA/Documents/580420d51800cd826a7e217c.png]
Единственное различие, которое я вижу, это «частная» часть пути к файлу. Когда я пытаюсь проверить, существует ли файл, используя путь к файлу, я получаю ответ от добавления имени файла (того, которое без частной части) Я получаю false.
Чего я не понимаю?
Комментарии:
1. Помогло ли это вам, в моем случае все работало нормально
Ответ №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)
И ваше изображение сохраняется в каталоге Documents
Теперь, чтобы загрузить его обратно
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")
}
Комментарии:
1. Вы упускаете суть. Распечатайте URL-адреса в своем коде, и вы увидите проблему: в ImagePath нет ведущего «private».
2. OP не опубликовал тело своей
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-адрес, ведущий на private, при возврате изображения обратно. Это было предположение.