NSArrayURL, userDefault filePath и URL

У меня есть один исходный код pdf, и я хочу добавить URL-адрес в массив и использовать UserDefault

let defaults = UserDefaults.standard

struct Constants {

    static let myKeyURL = "myKeyUrl"

}

Я скачиваю такой PDF-файл

let documentsPath =NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

let fileName = urlString as NSString;
let filePath="\(documentsPath)/\(fileName.lastPathComponent)";

После того, как я сохраню путь вот так

var arrayUrl = [String]()
arrayUrl.append(filePath)
self.defaults.set(arrayUrl, forKey: Constants.myKeyURL)

Теперь я хочу читать

var arrayUrl = [String]()
defaults.stringArray(forKey: Constants.myKeyURL)
arrayUrl = defaults.stringArray(forKey: Constants.myKeyURL)!

Мне нужно прочитать эту модель

documents = arrayUrl.flatMap { PDFDocument(url: $0 ) }

Но я получил сообщение Невозможно преобразовать значение типа String в ожидаемый тип аргумента URL. Мне нужен этот файл URL (arrayUrl) в этом формате file: // /private/var/mobile/Containers/Data/Application/----/Documents/Sample.pdf


person user2296278    schedule 31.01.2018    source источник


Ответы (1)


Ошибка очевидна:

PDFDocument(url: ожидает URL, вы передаете String, что является классическим несоответствием типа.

Вам необходимо создать экземпляры URL из строк

documents = arrayUrl.flatMap { PDFDocument(url: URL(fileURLWithPath: $0) ) }

Однако вам не рекомендуется сохранять полный путь, потому что путь к папке «Документы» изменится. Сохраняйте только имя файла или относительный путь и получайте фактический путь к папке «Документы» при каждом запуске приложения.

person vadian    schedule 31.01.2018
comment
Вы должны упомянуть, что OP должен сохранять только имя файла и каталог, в котором он находится. Фактический путь к файлу может измениться - person Leo Dabus; 31.01.2018