当我尝试使NSURLSession
实例无效时,我遇到了一个奇怪的问题。代码非常简单:我有一个视图控制器、两个按钮(开始:和停止:)和一个用于 url 的文本字段。
代码的简单摘录:
- (IBAction)start:(id)sender {
NSURLSessionConfiguration *conf = [NSURLSessionConfiguration backgroundSessionConfiguration:@"conf"];
self.session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:nil];
NSURLSessionDownloadTask *task = [self.session downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.url.text]]];
[task resume];
}
- (IBAction)cancel:(id)sender {
[self.session invalidateAndCancel];
}
或者,如果您愿意,可以选择整个项目:链接
现在,尝试下载一个文件 ( http://download.thinkbroadband.com/1GB.zip )。
由于我希望此下载在后台继续进行,因此我正在使用后台会话。
会话正确启动并在后台继续下载,但如果我尝试取消它(发送invalidateAndCancel
),我的访问权限不正确。
启用 Zombie 的分析给出这个僵尸对象:_NSCFBackgroundDownloadTask
.
因此,如果我保留NSURLSessionDownloadTask
(使用强大的属性来存储它),则不会发生错误的访问。但是,AFAIK,NSURLSession 应该保留它本身的任务,所以我想了解我的代码有什么问题(也许我在文档中遗漏了一些东西?)或者我是否应该提交错误报告。
谢谢