Я пытаюсь создать приложение, в котором пользователь работает с изображениями и создает структуры, которые содержат несколько изображений с соответствующими значениями.когда пользователь заполняет всю информацию и нажимает сохранить, генерируется структура, а затем изображение сохраняется в FileManager.default, а остальная информация сохраняется в пользовательских значениях по умолчанию:
guard let documentDirectoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
return
}
let imageName = name+"_"+String(banknote.key)+".png"
let imgPath = documentDirectoryPath.appendingPathComponent(imageName)
do {
try banknote.value.pngData()?.write(to: imgPath)
self.imageLoc[banknote.key] = imageName
} catch {
print("its an error")
}
И затем я используюфункция, которая вытягивает изображения для каждого экземпляра обратно в UIImages, если необходимо, например:
func getImages() -> [Int:UIImage]{
var unarchivedImages = [Int:UIImage]()
if !self.images.isEmpty {
let documentDirectoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
for imageLoc in images{
let imageURL = documentDirectoryPath.appendingPathComponent(imageLoc.value)
let image = UIImage(contentsOfFile: imageURL.path)
unarchivedImages[imageLoc.key] = image
}
}
Проблема, однако, возникает, когда пользователь хочет обновить экземпляр, скажем, изменить какую-то другую переменную внутри.Моя процедура заключается в том, чтобы сначала удалить изображения следующим образом:
let documentDirectoryPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
for imageLoc in images{
let imageURL = documentDirectoryPath.appendingPathComponent(imageLoc.value)
if FileManager.default.fileExists(atPath: imageURL.path){
try? FileManager.default.removeItem(atPath: imageURL.path)
} else {
print("failed")
}
}
, а затем создать новый экземпляр и снова сохранить его, как в первом блоке кода.Однако, если я использую процедуру удаления, показанную выше, сохранение изображения больше не работает и выдает ошибку:
CreateDataWithMappedFile: 1429: «открыть» не удалось / var / mobile / Containers / Data / Application /83615D52-A4E7-4930-ABE3-B3702AC294F2 / Documents / h_1.png 'error = 2 (Нет такого файла или каталога)
handle_write_error: 103: ошибка потока
handle_write_error: 103: нет IDATзаписано в файл
Есть идеи?