Сохраните пути к скачано у файлу и дальше использование


#1

Ситуация:

  1. В tableview несколько ячеек в них кнопки download
  2. Все информация о линках, и названиях берется из JSON, который содержится в самой программе
  3. Когда нажимаем на кнопку, файл скачивается, потом нажав на ячейку , мы переходим на другой вью контроллер с плеером
  4. В плеер передается линк о том где сохранен файл

Проблема :

  1. Когда мы заходим в приложение еще раз, файл уже скачан
  2. Я хочу сразу же не нажимая перейти в плеер
  3. Приложение вылетает, так как плеер не знает пути к файлу, который ему играть
  4. Работает только тогда, если до нажатия на ячейку, нажать download

Вопросы:

  1. Как сделать чтобы после скачивания, путь к файлу сохранялся за ячейкой?
  2. Или как запустить проверку наличия файлов скачаны они или нет
  3. Потому что ячейка узнает какая ей нужна ссылка только по нажатию на кнопку download

Мне в чате посоветовали
Цитирую:
“В модели у тебя есть url файла по которому нужно скачать файл
После скачивания ты кладёшь ссылку на файл в объект модели
Например localPath = documentsFolder/lessons/urlOfLesson
Или вообще делаешь localPath вычисляемым свойством, которое будет ходить в FileManager и проверять есть ли у тебя файл
Но это не лучший вариант потому что для этого придётся постоянно дергать FileManager
Альтернативно
Можно сделать локальный путь хранимым свойством и по инициализации модели сетить в localPath значение при условии что у тебя есть файл по пути documentsFolder/lessons/urlOfLesson
Но самым идеальным вариантом будет хранить модель чтобы без лишней на то необходимости не бегать в FileManager за проверкой на существование файла”

Я правда не знаю как это сделать и мне кажется, что можно проще.
Возможно я неправ

Заранее спасибо


#2

Так как новый пользователь даёт только один скриншот загружать


#3

Не знаю почему вашему советчику не нравится способ дергать FileManager, но я использовал именно такой подход. Создал в модели объекта вычмсляемое свойство

var fileLocalDestination: String? {
        var destination: URL {
            let fileName: String = self.title ?? "unknown"
            let fileExtension: String = self.fileExtension ?? "file"
            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
            let fileURL = documentsURL.appendingPathComponent(fileName).appendingPathExtension(fileExtension)
            
            return fileURL
        }
        
        if FileManager.default.fileExists(atPath: destination.path) {
            return destination.path
        }
        
        return nil
    }

#4

Спасибо большое, Мне это вместо моего destination вставить?


#5

В моем случае это вычисляемое свойство из модели, которое ищет файл по имени и типу файла из модели. Вам нужно переделать под свои условия.


#6

Просто смысл в том, что путь к файлу узнается только когда нажимается на ячейку, возможно ли сделать авторсканирование всего таблвью при заходе?


#7

У меня делается проверка на нахождение файла именно при построении ячеек. У вас же перед построением ячеек есть данные для заполнения, в момент когда начинаете заполнять ячейку и делайте проверку, а дальше уже скрывайте кнопку или еще что-то в зависимости от результата проверки.


#8

Спасибо за ответ, я включил проверку, только теперь когда перехожу на другой вью играет все время один и тот же файл.