Ошибка при попытке прочитать сохраненные данные из каталога документов после перезапуска - PullRequest
0 голосов
/ 20 сентября 2018

Я прочитал несколько ответов на похожие вопросы, и каждый раз проблема заключалась в сохранении абсолютного пути вместо сохранения только имени файла и повторного создания URL-адреса каждый раз.Я пытался следовать примерам кода, который я видел в этих ответах, но результат был таким же: «Не удалось прочитать из файла, потому что нет такого файла или каталога».Я наверняка где-то напутал, и была бы признательна за помощь. Написание:

let dir = FileManager.default
         .urls(for: .documentDirectory, in: .userDomainMask)[0]
let accountDir = dir.appendingPathComponent("\(self.getHexString(str: self.account))", isDirectory: true)
let imageUrl = accountDir.appendingPathComponent("\(self.path.rawValue)")

if let imageData = UIImagePNGRepresentation(image) {
        FileManager().createFile(atPath: imageUrl.path, contents: imageData, attributes: nil)
    }

Чтение:

let dir = FileManager.default
        .urls(for: .documentDirectory, in: .userDomainMask)[0]
    let accountDir = dir.appendingPathComponent("\(self.getHexString(str: self.account))", isDirectory: true)
    let imageUrl = accountDir.appendingPathComponent("\(self.path.rawValue)")

   let imageData = try Data(contentsOf: imageUrl)

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я думал, что каталог, в котором я хотел сохранить свои изображения, создается автоматически, когда я добавляю его к пути и отмечаю isDirectory: true, но это не так.Итак, правильный код:

let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let accountDir = dir.appendingPathComponent("\(self.getHexString(str: self.account))", isDirectory: true)

    let isDirectoryExists = FileManager.default.fileExists(atPath: accountDir.path)
    if !isDirectoryExists {
        do {
            try FileManager.default.createDirectory(atPath: accountDir.path, withIntermediateDirectories: false, attributes: nil)
        } catch(let error) {
            print(error)
        }
    }

    let imageUrl = accountDir.appendingPathComponent("\(self.path.rawValue)")
    if let imageData = UIImagePNGRepresentation(image) {
        FileManager().createFile(atPath: imageUrl.path, contents: imageData, attributes: nil)
    }
0 голосов
/ 20 сентября 2018

Причин может быть две:

  1. Неправильно создается путь.Попробуйте изменить image.path на image.absoluteString

  2. Я думаю, что это просто создание файла, но ничего не записывается в этом

    Попробуйте следующий код после createfile:

    let file = try FileHandle(forUpdating: imageUrl) file.seekToEndOfFile() file.write(data: imageData) file.closeFile()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...