URLSession 没有返回位置数据(session:downloadTask:didFinishDownloadingToURL 位置)
Posted
技术标签:
【中文标题】URLSession 没有返回位置数据(session:downloadTask:didFinishDownloadingToURL 位置)【英文标题】:No data in location returned from URLSession(session:downloadTask:didFinishDownloadingToURL location) 【发布时间】:2015-10-22 18:00:54 【问题描述】:我正在使用标准后台会话来处理后台提取。操作开始正常并回调:
URLSession(session:downloadTask:didFinishDownloadingToURL location)
经常被调用,但是当我检查位置 url 的内容时,我发现 nil。我检查了正在处理的 url,它是好的,当在浏览器上提交时正确返回数据。可能是什么?我知道我需要复制临时缓存中的数据,但是当它应该仍然存在时,我立即检查了它的内容。这是我的代码:
let span:Float=0.005
func handleRemoteFetch(completionHandler: ((UIBackgroundFetchResult) -> Void)?)
fetchCompletion=completionHandler;
fetchInitiation=[unowned self] in
let theRequest=mapDelegate.sharedMapDelegate().requestForRefreshAndLocation(self.presentLocation!, span:self.span)
let task = self.backgroundSession.downloadTaskWithRequest(theRequest)
task.resume()
print(theRequest.description)
if (presentLocation != nil)
fetchInitiation!()
fetchInitiation=nil
func URLSession(session: NSURLSession,
downloadTask: NSURLSessionDownloadTask,
didFinishDownloadingToURL location: NSURL)
print(downloadTask.originalRequest!.description)
let data = NSData(contentsOfURL: location)
if data != nil
let str = String(data:data!, encoding:NSUTF8StringEncoding)
print(str);
else
print("empty output")
【问题讨论】:
【参考方案1】:当应用在物理设备上执行时,该问题并未出现。一段时间后,它也无缘无故地开始在模拟器上工作。
【讨论】:
只是为了给未来的访问者添加评论,我认为他上面所说的很关键:“当它应该还在时,我立即检查了它的内容。”对我来说,我在 10 次代码后检查 NSURL 的内容,有一半时间它不存在,因为它是一个临时 URL,并且已经从内存中删除。确保在下载完成第一件事后立即获取 NSURL 的内容,以知道它不会返回 nil。以上是关于URLSession 没有返回位置数据(session:downloadTask:didFinishDownloadingToURL 位置)的主要内容,如果未能解决你的问题,请参考以下文章
从 URLSession 完成处理函数 Swift 3 返回字符串
RxSwift之深入解析URLSession的数据请求和数据处理