标识为

时间:2016-05-10 13:13:54

标签: nsurlsession nsurlsessiondatatask nsurlsessionconfiguration

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

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

Click Here

1 个答案:

答案 0 :(得分:5)

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

  • 告诉nsurlsessiond(后台守护程序)创建会话。
  • 在您的应用中创建与该会话相关的本地会话。

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

据我所知,您的应用通常无法自愿将其会话与后台会话分离。因此,当您的应用尝试使用相同的标识符创建会话时,突然有两个会话都尝试与nsurlsessiond中的同一外部会话进行通信,并且事情出错了。这不是支持使用API​​的方式。

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

但请注意,如果您的应用重新启动以处理后台事件(仅限iOS),当您调用事件提供的完成处理程序时,您应用的本地会话确实会失效,您需要创建如果你的应用程序在此之后做了什么。这是我唯一知道背景会话停止与nsurlsessiond中的后台会话相关联的情况,因此这是您应该创建具有相同会话的唯一情况一次启动时ID为两次(一次是当您被要求处理后台事件时,然后可能会再次发出didFinishLaunching来表示用户预设您的应用)。