Ios 如何执行代码后台下载?

Ios 如何执行代码后台下载?,ios,swift,download,background,Ios,Swift,Download,Background,我正在开发一个应用程序,它需要在第一次启动时下载大量数据(大约1gb的图像)。目前我正在使用库来执行下载。该库为下载实现了后台模式,我甚至将其设置为我的目标的功能。基本上我有这样一个场景: 我调用一个API,它给我一个json 我将所有数据保存在核心数据中 我将要下载的图像的所有URL保存在一个数组中 我保存核心数据 我开始下载 我一次下载一个项目 当一个项目完成时,我将本地路径保存在核心数据中,并将其从URL数组中删除 我开始新的下载 当一切都完成后,我会显示隐藏进度条的UI 我想给用

我正在开发一个应用程序,它需要在第一次启动时下载大量数据(大约1gb的图像)。目前我正在使用库来执行下载。该库为下载实现了后台模式,我甚至将其设置为我的目标的功能。基本上我有这样一个场景:

  • 我调用一个API,它给我一个json
  • 我将所有数据保存在核心数据中
  • 我将要下载的图像的所有URL保存在一个数组中
  • 我保存核心数据
  • 我开始下载
    • 我一次下载一个项目
    • 当一个项目完成时,我将本地路径保存在核心数据中,并将其从URL数组中删除
    • 我开始新的下载
  • 当一切都完成后,我会显示隐藏进度条的UI

我想给用户的可能性,把应用程序在后台进行下载。它在模拟器上运行得很好,但在设备上却不行。我认为在模拟器上工作是因为Mac有大量内存。你有什么建议吗

NSURLSession类支持后台文件下载。即使你的应用程序被终止,它也会下载你的文件。如果需要,下载完成后,它会在后台重新启动你。

NSURLSession类支持后台文件下载。即使您的应用程序被终止,它也会下载您的文件,并在需要时在下载完成后在后台重新启动您。

要支持后台下载,您必须配置
NSURLSession
对象。要配置会话,必须首先创建一个
NSURLSessionConfiguration
对象,并将多个属性设置为适当的值。然后,在创建会话时,将该配置对象传递给相应的初始化方法
NSURLSession

创建支持后台下载的配置对象的步骤如下:

  • 首先使用
    backgroundSessionConfigurationWithIdentifier
    :NSURLSessionConfiguration的方法创建配置对象
  • 根据需要配置配置对象的任何其他属性,如
    sessionSendsLaunchEvents
    decreative
  • 使用配置对象创建
    NSURLSession
    对象
示例:-

 let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("bgSessionConfiguration")
    configuration.discretionary = true
    configuration.allowsCellularAccess = true //default true
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)

要支持后台下载,必须配置
NSURLSession
对象。要配置会话,必须首先创建一个
NSURLSessionConfiguration
对象,并将多个属性设置为适当的值。然后,在创建会话时,将该配置对象传递给相应的初始化方法
NSURLSession

创建支持后台下载的配置对象的步骤如下:

  • 首先使用
    backgroundSessionConfigurationWithIdentifier
    :NSURLSessionConfiguration的方法创建配置对象
  • 根据需要配置配置对象的任何其他属性,如
    sessionSendsLaunchEvents
    decreative
  • 使用配置对象创建
    NSURLSession
    对象
示例:-

 let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("bgSessionConfiguration")
    configuration.discretionary = true
    configuration.allowsCellularAccess = true //default true
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)

你可以对应用程序进行评测,看看它是否占用了太多的CPU或内存。我知道在每次后台通话中你能做多少工作是有限制的,也许这就是问题所在。仅供参考,这里还有另一个下载管理器,如果该管理器有bug的话。你可以对应用程序进行评测,看看它是否占用了太多的CPU或内存。我知道在每次后台通话中你能做多少工作是有限制的,也许这就是问题所在。仅供参考,这里还有另一个下载管理器,如果该管理器有bug的话。