Почему URL-адрес усекается при сохранении, а затем извлекается из локальной файловой системы? - PullRequest
0 голосов
/ 01 сентября 2018

Я сгенерировал URL со следующей функцией ниже. Я хотел бы сохранить это в локальной папке для дальнейшего использования. Однако когда я сохраняю его в локальной папке, а затем извлекаю, URL-адрес усекается. Кто-нибудь может посоветовать, как мне сохранить и извлечь полный URL-адрес?

func createPhotoURL() -> URL {

    let fileName = "tempImage_wb.jpg"

    let documentsDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let documentDirectory = documentsDirectories.first!
    let pdfPageURL = documentDirectory.appendingPathComponent("\(fileName)")

    return pdfPageURL
}

Когда я вызываю функцию, я получаю URL полной длины:

let imageURL = createPhotoURL() // CORRECT URL FOR FILE UPLAOD
print("imageURL: \(imageURL)")

Консоль

file:///var/mobile/Containers/Data/Application/CDDE2FED-5AAB-4960-9ACF-33E7B42D05AE/Documents/tempImage_wb.jpg

Сохраните указанный выше URL в локальной папке и получите его:

UserDefaults.standard.set(imageURL, forKey: "URL_IMAGE")
guard let retirevedURL = UserDefaults.standard.string(forKey: "URL_IMAGE") else{return}
print("retirevedURL: \(retirevedURL)")

Консоль

retirevedURL: ~/Documents/tempImage_wb.jpg

1 Ответ

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

Чтобы ответить на ваш вопрос, используйте UserDefaults.standard. url вместо UserDefaults.standard.string

guard let retirevedURL = UserDefaults.standard.url(forKey: "URL_IMAGE") else{return}

Но это будет работать, только если вы сохраните путь и получите его в том же сеансе. Если вы используете приведенный выше код и запускаете приложение несколько раз, вы получите не усеченные URL-адреса (как вы хотите). Но если вы проверите его правильно, вы увидите, что на разных сессиях вы получаете разные URL.

Таким образом, вы не должны сохранять его как URL, вместо этого вы должны сохранять его как строку. Для этого вы можете использовать absoluteString свойство URL

let imageURL = createPhotoURL()
print("imageURL: \(imageURL)")
UserDefaults.standard.set(imageURL.absoluteString, forKey: "URL_IMAGE")

И для извлечения вы сначала извлечете сохраненную строку из UserDefaults, а затем преобразуете ее в URL

if let urlString = UserDefaults.standard.string(forKey: "URL_IMAGE"),
    let retrievedURL = URL(string: urlString) {

    print("retrievedURL: \(retrievedURL)")
}
...