2015-10-22 52 views
1

上下文: 我尝试使用backgroundSessionConfiguration从动作扩展调用创建任务(下载或上载)。NSURLSessionTask创建失败,带有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];它返回零。

如果我将配置更改为NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];,则会创建一个任务。

我没有看到我做错了什么,我创建了一个应用程序组,我使用它的应用程序和扩展。

我使用在config.sharedContainerIdentifier中创建的组名,但我不确定是否有必要。

注意:我有与uploadTask相同的问题。

回答

0
  1. 您使用ARC吗?如果没有,请确保您的会话正确保留。 (它看起来像你直接使用伊娃)

  2. 是共享容器标识符是否正确?如果容器不在您的权利中或者不存在,您的会话将立即失效。添加一个无效委托方法,看看它是否被调用。如果是这样,那可能是问题所在。