iOS очищает загруженные ресурсы On-Demand mp3, как это предотвратить? - PullRequest
0 голосов
/ 27 апреля 2018

iOS удалит ресурсы после загрузки, как только ей потребуется освободить место.

Изменение приоритетов сохранения активов не помешает системе удалить их, как указано в разделе «Настройка приоритета сохранения» здесь .

Мой код для загрузки ресурсов по требованию:

func requestResourceWith(tag: [String],
                      onSuccess: @escaping () -> Void,
                      onFailure: @escaping (NSError) -> Void) {
    currentRequest = NSBundleResourceRequest(tags: Set(tag))

    guard let request = currentRequest else { return }

    request.endAccessingResources()

    request.loadingPriority =
    NSBundleResourceRequestLoadingPriorityUrgent

    request.beginAccessingResources { (error: Error?) in
        if let error = error {
            onFailure(error as NSError)
            return
        }
        onSuccess()
    }
}

После загрузки ресурсов по требованию к ним можно получить доступ из основного комплекта.

Есть ли способ заставить аудио-файлы сохраняться и, следовательно, мешать системе их очищать?

1 Ответ

0 голосов
/ 07 апреля 2019

В ответ на комментарий @RJB выше я отвечу на мой вопрос:)

Как только ресурсы по запросу загружаются, вам необходимо сохранить их на жестком диске (например, в каталоге документов), чтобы сохранить их. В противном случае iOS сохранит за собой право удалить их, как только потребуется больше свободного места.

Что-то вроде следующего:

request.beginAccessingResources { (error: Error?) in
     if let error = error {
           DispatchQueue.main.async {
                 onFailure(error as NSError)
           }
           return
     }
     // Move ODR downloaded assets to Documents folder for persistence
     DispatchQueue.main.async {
           let path: String! = Bundle.main.path(forResource: "filename", ofType: "mp3")
           let sourceURL = URL(fileURLWithPath: path)
           let destinationURL = // Build a destination url in the Documents directory or any other persistent Directory of your choice
           do {
              try FileManager.default.copyItem(at: sourceURL, to: destinationURL)
           }catch  {
              // Handle error accordingly
           }
           onSuccess()
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...