iOS正在清除按需资源下载的mp3,如何防止这种情况?

问题描述 投票:0回答:1

只要需要释放一些空间,iOS就会在下载后清除资产。

更改资产的保存优先级不会阻止系统清除它们,如“设置保存优先级”部分here中所述。

我下载按需资源的相关代码如下:

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()
    }
}

下载按需资源后,可以从主捆绑中访问它们。

反正有没有让音频持续存在,从而阻止系统清除它们?

swift4 ios11 xcode9 on-demand-resources
1个回答
1
投票

为了回应上面的@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()
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.