Ios 更改现有NSURLSession上的AllowCellularAccess

Ios 更改现有NSURLSession上的AllowCellularAccess,ios,nsurlsession,nsurlsessionconfiguration,Ios,Nsurlsession,Nsurlsessionconfiguration,是否可以通过修改基础的NSURLSessionConfiguration来更改现有NSURLSession上的allowscellaraccess的值 如果用户的设备当前已连接到WiFi,我希望在不取消现有请求的情况下尊重用户对我的应用程序设置所做的任何更改。否。会话将复制其配置。它没有保留它。在你的情况下,我会做的是: 复制会话的现有配置并更改该标志 使用修改后的配置创建新会话 如果用户使用Wi-Fi,请在旧会话上调用FinishTasks和Invalidate。这将使会话保持足够长的时间,

是否可以通过修改基础的
NSURLSessionConfiguration
来更改现有
NSURLSession
上的
allowscellaraccess
的值


如果用户的设备当前已连接到WiFi,我希望在不取消现有请求的情况下尊重用户对我的应用程序设置所做的任何更改。

否。会话将复制其配置。它没有保留它。在你的情况下,我会做的是:

  • 复制会话的现有配置并更改该标志
  • 使用修改后的配置创建新会话
  • 如果用户使用Wi-Fi,请在旧会话上调用FinishTasks和Invalidate。这将使会话保持足够长的时间,以完成任何现有请求,然后会话将消失
  • 如果用户使用手机,请呼叫invalidateAndCancel,然后等待重新启动这些任务,直到用户使用Wi-Fi

此外,您还可以通过生成ResumeData:对任务调用
取消,然后在具有不同配置的不同会话中重新创建(恢复)该任务。任务仍将报告其
AllowCellularAccess
的原始配置,但将根据新会话的配置进行操作。(过时的报告可能会被认为是一个bug。)

因此,如果用户在AllowCellularAccess=NO的情况下开始下载,然后走到外面,意识到下载已停止,并希望通过蜂窝网络下载,他们必须重新开始下载?如果应用程序使用下载任务,并且应用程序和服务器都正确支持恢复下载,则用户应该能够在设备返回到Wi-Fi网络后恢复他或她离开的位置。但是,我不知道有什么方法可以让它在蜂窝网络上继续工作,除非
allowscellaraccess
首先是
YES
,因为无法将任务移动到新会话,而且无法修改任务的底层
NSURLRequest
allowCellularAccess
属性。我最近了解到,您实际上可以取消生成恢复数据的任务,然后在另一个会话中重新创建它。出于某种原因,我认为这不起作用,但显然,我错了。因此,这将是一种在事后改变任务行为的方法。