我在委托方法didFinishDownloadingToURL上遇到NSURLSession的奇怪问题。
我要做的第一件事是检查临时下载的文件是否存在:
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{
if (![[NSFileManager defaultManager] fileExistsAtPath: [location path]])
{
NSLog(@"Error. File not found");
return; // is giving error when the app is wake up by the system
}
...
}
当应用处于前台并下载完成时,它正常工作。但是当应用程序处于后台并被操作系统强制杀死时,它将返回false。
有没有人知道可能发生的事情?我知道当应用程序被操作系统唤醒时,执行此委托方法有一个时间限制,因为临时文件不在那里是没有意义的。我甚至无法将它复制到另一个地方...... 因为文件的大小是否有意义?我正在下载+ -130MB的文件。
感谢。
答案 0 :(得分:1)
我在卸载应用后安装应用程序解决了同样的问题。当网络会话工作时强制关机发生时,似乎NSURLSession会在系统上留下碎片。
答案 1 :(得分:-2)
来自Apple Docs:
(location
是..)“临时文件的文件URL。由于该文件是临时文件,您必须打开文件进行读取或将其移动到应用程序沙盒容器目录中的永久位置从这个委托方法返回。
如果您选择打开文件进行读取,则应该在另一个线程中进行实际读取,以避免阻塞委托队列。“