1

上下文:我尝试使用 backgroundSessionConfiguration 从操作扩展调用创建任务(下载或上传)。

为此,我将苹果文档中的示例放在一边

-(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 有同样的问题。

4

1 回答 1

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

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

于 2015-12-03T22:26:01.530 回答