0

我在我的项目中尝试使用此代码在后台下载大文件,它工作正常。我开始在 UIViewController 中下载。如果我转到另一个视图并返回 UIViewController ,它会停止重新加载进度条。

我得到了带有标识符的背景 URLSession 的问题已经存在!。我想在每次加载 UIViewController 时创建新会话。我想在关闭视图控制器时使所有后台会话无效。我尝试了所有可能性来解决这个问题,但没有成功。

点击这里

4

1 回答 1

5

创建后台会话时,您正在做两件事:

  • 告诉 nsurlsessiond(后台守护进程)创建会话。
  • 在您的应用程序中创建一个连接到该会话的本地会话。

标识符的目的是在您的应用程序被操作系统终止时允许您的应用程序重新连接到外部会话(由 nsurlsessiond 控制)。

据我所知,您的应用程序通常不可能自愿将其会话与后台会话分离。因此,当您的应用程序尝试创建具有相同标识符的会话时,突然有两个会话都试图与 nsurlsessiond 中的同一个外部会话进行对话,并且事情变得非常错误。这不是使用 API 的受支持方式。

后台会话对象必须在您的应用程序运行的整个过程中保持活动状态。不要试图在一次启动中处理它并重新创建它。除非您的应用重新启动,否则您永远不应创建具有相同 ID 的会话。

但是请注意,如果您的应用重新启动以处理后台事件(仅限 iOS),当您调用事件提供的完成处理程序时,您的应用的本地会话确实会失效,如果您的应用在之后执行任何操作,则需要创建它那。这是我知道后台会话停止与 nsurlsessiond 中的后台会话关联的唯一情况,因此这是您应该在一次启动中两次创建具有相同 ID 的会话的唯一情况(一次当您'被要求处理后台事件,然后当您didFinishLaunching接到电话以指示用户将您的应用程序置于前台时可能会再次处理)。

于 2016-08-03T02:47:08.040 回答