Путь к файлу, не зависящий от песочницы iOS - PullRequest
0 голосов
/ 09 марта 2019

Я занимаюсь разработкой простого приложения для iOS.И я был очень удивлен, что когда изображение написано так, как показано в коде ниже, путь остается действительным до перезапуска приложения.После перезапуска приложения создается новая песочница, и это делает недействительным предыдущий путь.Я пытаюсь найти способ иметь путь к файлу, независимый от песочницы.Возможно ли это даже без прохождения цикла разрешения (например, FileManager.default.url ...)?

    static func saveToDocument(name: String, image: UIImage) -> String? {
    guard let data = image.pngData() else { return nil; }
    guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
        return nil
    }
    do {
        let file = directory.appendingPathComponent("\(name).png");
        try data.write(to: file!)
        return file?.absoluteString
    } catch {
        return nil
    }
}

1 Ответ

1 голос
/ 09 марта 2019

Прекратить поиск, нет никакого способа, и для этого есть веская причина: безопасность ваших данных.

Вы всегда должны получать URL каталога документов с помощью FileManager.default.url(for, это не так.Это дорого.

Guard Если URL-адрес не требуется, папка документов гарантированно существует.

Возвращает только имя файла, а не полную строку URL-адреса, и я рекомендую сделатьФункция throw для передачи всех ошибок.

enum FileError : Error {
    case noData
}

static func saveToDocument(name: String, image: UIImage) throws -> String {
    guard let data = image.pngData() else { throw FileError.noData }
    let directory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)            
    let fileURL = directory.appendingPathComponent("\(name).png")
    try data.write(to: fileURL)
    return fileURL.lastPathComponent
}

И никогда не используйте NS... классы, такие как NSURL в Swift, если есть собственный аналог (URL).

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