【问题标题】:URLSession datatask return 0 bytes of data in Swift4.2/iOS12URLSession datatask在Swift4.2/iOS12中返回0字节数据
【发布时间】:2019-04-18 13:26:25
【问题描述】:

我们正在从我们的应用程序访问 PDF URL 并获取 PDF 数据。将我们的代码库 Swift2.3 转换为 Swift4.2 后,我们得到 0 字节的数据作为响应。但是当我们在浏览器中打开相同的 URL 时,它会显示 PDF 文件。我们也没有收到任何错误。在 Swift2.3 代码库中,我们将准确的数据值作为有效字节。我们需要在 URLSession 中配置什么来获取 Swift4.2 中的确切数据字节。

//url - PDF 服务器 url 值

let session:Foundation.URLSession = Foundation.URLSession(configuration:URLSessionConfiguration.default delegate:self delegateQueue:nil)
let task = session.dataTask(with: url, completionHandler:{(data,response,error) in 
    // here data coming as 0 bytes 
})
task.resume()

【问题讨论】:

  • 为什么要在 URLSession 中包含 Foundation 前缀?看起来您的项目中有一个名为 URLSession 的自定义结构/类,您应该避免使用 Swift 原生结构/类名称。
  • 我正在处理同样的问题。你找到解决办法了吗?当我找到它时,我会在这里发布。
  • 同样的问题,所有请求都返回0字节数据但没有错误

标签: ios swift nsurlsession ios12 swift4.2


【解决方案1】:

URLSession.dataTask 有时返回时没有错误但零字节。我的解决方法是改用 URLSession.downloadTask,并使用 localURL 的内容来创建数据缓冲区。顺便说一句,使用 .utf8 编码从此缓冲区创建字符串失败,而 .ascii 工作正常。因此,我怀疑 URL 内容的编码可能是问题所在。

【讨论】:

  • 这不是所提问题的正确答案。
  • 期待您的“正确”回答。在我们等待期间,此解决方案有效。
  • 这是 Xcode 问题,当您在鼠标提示弹出视图中看到时,它会显示零字节。当您打印它时,它会显示收到的实际字节数。更多详情请看截图:drive.google.com/file/d/15MJvmJaZFKNNTUqxwJvCn_Cy3qHk3gNy/…
  • Yogesh,不是真的。是的,Xcode 确实存在您描述的问题,但这不是这里的问题。有时 URLSession.dataTask 无法下载浏览器没有问题的文件。没有给出错误,打印文件显示下载了零字节。使用 URLSession.downloadTask 可以很好地处理这些文件。
猜你喜欢
  • 2018-06-18
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多