【发布时间】:2015-03-04 16:47:38
【问题描述】:
我在代理方法 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
}
...
}
当应用程序处于前台并下载完成时,它可以正常工作。但是当app在后台被操作系统强杀时,返回false。
有人知道可能发生的事情吗?我知道当应用程序被操作系统唤醒时执行此委托方法有时间限制,因为临时文件不存在是没有意义的。我什至无法将其复制到其他位置... 因为文件的大小而有意义吗?我正在下载一个 +-130MB 的文件。
谢谢。
【问题讨论】:
-
我也有同样的问题。提交了错误报告openradar.appspot.com/radar?id=4943165404479488
-
尝试打开 URL。由于与应用沙箱相关的一些怪癖,fileExistsAtPath 调用可能对您说谎。
-
有类似的问题。 location 指向不存在的文件。它不经常发生。有点烦。我想知道这个错误是否会导致电池寿命下降,因为该文件将被再次下载。如果位置再次错误,则再次下载......等等。
-
我也有同样的问题,但是使用 Swift 3 和
FileManager.copyItem(at:to:)会抛出错误“文件“CFNetworkDownload_V2oQ2o.tmp”不存在。”而不是fileExistsAtPath:返回false。 -
我将其作为位置 /var/mobile/Library/Caches/com.apple.nsurlsessiond/Downloads/com.xxxxxxx/CFNetworkDownload_uFBpqp.tmp ,但归档不存在那里。当前修复它的唯一方法是重新启动设备,然后下载似乎在完成时存在
标签: ios objective-c download nsurlsession