NSURLSessionTask 创建在带有 backgroundSessionConfiguration 的扩展中失败
Posted
技术标签:
【中文标题】NSURLSessionTask 创建在带有 backgroundSessionConfiguration 的扩展中失败【英文标题】:NSURLSessionTask creation fail in extension with backgroundSessionConfiguration 【发布时间】:2015-10-22 16:14:48 【问题描述】:上下文: 我尝试使用 backgroundSessionConfiguration 从操作扩展调用创建任务(下载或上传)。
为此,我在苹果documention 中放了一个例子
-(void)downloadTest
NSURLSession *mySession = [self configureMySession];
NSURL *url = [NSURL URLWithString:@"http://www.sellcell.com/blog/wp-content/uploads/2014/03/dog-apps.jpg"];
NSURLSessionTask *myTask = [mySession downloadTaskWithURL:url];
[myTask resume];
- (NSURLSession *) configureMySession
if (!_mySession)
NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.mycompany.myapp.backgroundsession"];
// To access the shared container you set up, use the sharedContainerIdentifier property on your configuration object.
config.sharedContainerIdentifier = @"group.com.mycompany.appname";
_mySession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
return _mySession;
我的问题是当我调用 [mySession downloadTaskWithURL:url];
时它返回 nil。
如果我将配置更改为NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
,则会创建一个任务。
我看不出我做错了什么,我创建了一个应用组,并在应用和扩展程序中使用它。
我使用在config.sharedContainerIdentifier
中创建的组名,但我不确定是否有必要。
注意:我对 uploadTask 也有同样的问题。
【问题讨论】:
【参考方案1】:您使用的是 ARC 吗?如果没有,请确保您的会话被正确保留。 (看起来你是在直接使用 ivar。)
该共享容器标识符是否正确?如果容器不在您的权利中或尚不存在,您的会话将立即失效。添加一个失效委托方法,看看它是否被调用。如果是这样,那可能就是问题所在。
【讨论】:
以上是关于NSURLSessionTask 创建在带有 backgroundSessionConfiguration 的扩展中失败的主要内容,如果未能解决你的问题,请参考以下文章
如何处理完成处理程序块中取消的 NSURLSessionTask ?
如果应用程序被杀死,NSURLSessionTask 会发生啥