gpt4 book ai didi

ios - NSURLSession 下载任务在成功后失败

转载 作者:行者123 更新时间:2023-11-29 02:14:59 32 4
gpt4 key购买 nike

我的 NSURLSessionDownloadTasks(使用后台下载配置)时常遇到一个奇怪的问题。

它总是与 NSURLDomain 代码 NSURLErrorBackgroundSessionWasDisconnected (-997) 的错误有关。错误本身通常似乎是由于应用程序在 Xcode 开发过程中普遍崩溃或被强行关闭所致。

相关代码归结为

- (void)download:(NSURLRequest *)request
{
NSURLSessionDownloadTask *downloadTask = [self.urlSession downloadTaskWithRequest:request];
[downloadTask resume];
}

- (void) URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)tempLocation
{
NSLog(@"task %@ didFinishDownloadingToURL with status code %@", downloadTask, @([downloadTask.response statusCode]));
}

- (void) URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
{
NSLog(@"task %@ didCompleteWithError %@", task, error);
}

这些情况下的问题是,同一个 NSURLSessionDownloadTask 在 -[NSURLSessionTaskDelegate URLSession:task:didCompleteWithError:] 中得到两次(而不是预期的一次)调用。一旦没有错误(这与对 -[NSURLSessionDownloadDelegate URLSession:downloadTask:didFinishDownloadingToURL:] 的 200 OK 响应代码的调用对齐)然后另一次,通常是几秒钟后 错误 (-997)。两次它都是传递给这些委托(delegate)方法的任务的完全相同的内存地址。

有没有人遇到过类似的事情?在我被告知我的任务成功后,我并不期待第二次回调。为什么 NSURLSession 可能仍然坚持它据称已经完成的任务,但突然间认为它应该通知我它失去了与后台传输服务的连接,这有什么明显的原因吗?

最佳答案

FWIW,我有一个类似的问题,因为我正在从在后台线程中运行的 NSURLSession 委托(delegate)方法更新 UI。

所以,我的解决方案是将与 UI 相关的代码移动到主线程上运行,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
//code updating the UI.
});

关于ios - NSURLSession 下载任务在成功后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856483/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com