问题标签 [nsurlsessiontask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
104 浏览

ios - 使用 NSURLSessionDataTask,我可以继续下载文件,即使用户在退出应用程序后返回?

假设,我正在使用NSURLSessionDownloadTaskor下载一个 300 MB 的文件NSURLSessionDataTask(目前,我不知道在我的情况下哪个是最佳选择)。用户退出应用程序或应用程序在下载 250 MB 时突然崩溃。下次,当用户打开应用程序时,我将不得不从 250 MB 恢复下载。

我已经使用NSURLSessionDownloadTask. 但是,如果我们使用,在下载完成之前NSURLSessionDownloadTask我们无法访问临时文件的 (并且我们会将这个临时文件移动到其永久的最终位置)。NSURLdidFinishDownloadingToURL

我开始知道,我将不得不使用 aNSURLSessionDataTask而不是 a DownloadTask,然后使用委托方法NSURLSessionDataDelegate

这将允许我在收到数据时访问它。但是,我不知道我现在将如何管理事情。我想要一种方法,以便我可以在上面的委托中附加数据并将其写入磁盘的某个位置。第二个问题,我怎么知道只能从这里开始下载数据(即从 250 MB 开始)

真的可行吗?还是只有App处于活动状态才可行?

我对这个问题很绝望。

0 投票
0 回答
414 浏览

ios - 当我尝试在 post 方法 NSUrlSessionTask 中发送数据时,出现此错误?

错误:

错误域 = NSCocoaErrorDomain 代码 = 3840 “JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。” UserInfo={NSDebugDescription=JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。}

这是我预期的 json 响应:

这是我的代码:

将字符串转换为 nsdata 用于 post 方法:

我的其他 post 方法和 get 方法都在工作,除了这有什么问题吗?

0 投票
1 回答
799 浏览

swift - 测量 NSURLSession 的 dataTaskWithRequest 的总响应时间

使用 NSURLSession 的 dataTaskWithRequest 时,如果创建了许多 NSURLSessionDataTask 并且不一定会立即执行,那么如何测量总响应时间?存储开始时间并计算块内的差异不考虑任务可能一直在等待可用线程的时间。IE:

0 投票
0 回答
126 浏览

ios - 尝试上传字节时 URLSession 的意外行为

我的应用程序不断与服务器通信,我想计算我得到的带宽。为此,我决定计算上传和下载速度。

我正在使用 NSURLSession 与我的服务器通信。我正在做的是:在我恢复会话任务时存储时间戳(例如 Time1)。在URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) totalBytesSetnt 超过或等于 expecetedBytesToSent 的方法中,我从Time1当前时间得到差异,这样我计算上传速度。

这是我的代码:

在这里,我在恢复会话任务后立即捕获了 time1。

我在我的代码中进一步使用了这个上传速度。我每次都使用新的会话任务发送相同的 JSON 数据(如上所述)。问题是:在第一次请求会话中需要一些时间来上传数据,但在那之后无论我在哪种网络速度下都需要的时间太少了。(使用网络链接调节器来改变网络)。

以下是示例:

0 投票
1 回答
1564 浏览

ios - 在 iOS 中计算网络速度。数据较少的往返时间不会告知确切的网络速度

我正在尝试在我的应用程序中计算网络速度,因此我只能上传在这种网络条件下可以上传的那么多数据。为此,我的计划是:

  1. 我的 App 会有一个默认的速度可能是(500KB/s)。
  2. 我的应用程序将发送包含 500kb 数据的请求。
  3. 它将监控系统上传数据并获得响应所花费的往返时间。例如,应用程序在 5 秒内收到 200kb 数据,速度将是 (500+200)/5。
  4. 根据上面的示例,该请求的带宽为 140KB/s。
  5. 我将从我的带宽计算指数移动平均值。
  6. 我将根据计算出的平均带宽发送下一个请求。

这是我对 NSURLSession 的实现:

如果我失去带宽,我可以使用这种方法找到它,因为我的平均带宽下降,但问题是一旦我达到低带宽并且我的网络条件得到改善,我的带宽将不会得到改善,因为我不断发送更少的数据在请求中,它会一直说带宽很低。

有什么方法可以找到我的网络状况是否得到改善并且可以发送更多数据?

我想到的一个解决方案是,我可以在每 10 个请求中发送最大数据(可能是 500KB),这样我就可以在网络条件得到改善的情况下获得更高的带宽。

0 投票
1 回答
1098 浏览

ios - NSURLSession:调用cancelByProducingResumeData后无法获取恢复数据

我想在用户取消下载或发生错误后恢复下载。但是当我调用cancelByProducingResumeData方法时,resumeData就是nil. 所以,我无法继续下载。我确定可以恢复下载链接,因为我们的PC客户端可以恢复下载该链接。这是我的代码。这是完整的项目

0 投票
0 回答
153 浏览

ios - 将 NSURLConnection+delegate 替换为 NSURLSession+delegate?

首先有很多类似的问题,但它们都是关于NSURLSessionDataTask使用完成处理程序创建的。就我而言,我有NSURLConnection很多委托方法,我需要将其替换为NSURLSession.

根据此链接,我需要委托方法URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:,但我不明白如何使用它,因为所有示例都是关于使用完成处理程序(只是成功或失败)创建任务,根本没有使用委托。

0 投票
2 回答
180 浏览

ios - NSURLSessionResponseCancel 产生错误?

我有时使用NSURLConnection对象并调用它的方法。cancel

现在我应该替换NSURLConnection-> NSURLSessionNSURLSession操作也有cancel方法的任务。

问题-[NSURLConnection cancel]只是停止处理请求,但如果我使用-[NSURLSessionTask cancel]它会产生“取消错误”。那么如何正确区分cancel是手动调用还是发生了真正的错误呢?

0 投票
2 回答
682 浏览

ios - 下载任务的NSURLsession后台传输服务,在App挂起的情况下还能用吗?

在提问之前,让我澄清一下我对 iOS App 状态的理解:


后台:在这种状态下,您的应用程序不再处于前台,但它仍然能够运行代码。

已暂停:您的应用程序在无法再运行代码时进入此状态。


现在,我想在应用程序处于后台时继续下载,即它仍然存在于多任务屏幕中。它与后台传输服务按预期工作。

但是,在一些教程参考中,我读到即使应用程序处于后台/暂停状态,您也可以执行下载。即使我的应用程序被挂起,即从多任务屏幕中删除,它还​​能工作吗?

我一直在阅读许多文档,包括有关下载任务的后台传输服务的 Apple 类参考,但没有人澄清当 App 暂停(杀死)时下载将不起作用。

感谢您的想法和建议!

0 投票
2 回答
1347 浏览

ios - NSURLSession 后台传输:从队列中下载的每个视频的回调

我正在使用后台传输服务下载多个视频NSURLSession。当应用程序处于后台模式时下载工作正常并且我对此感到满意。我的问题是,我想为从队列中下载的每个视频进行回调。

我期待为每个下载的视频调用以下方法:

当系统在后台传输后没有更多消息要发送到我们的应用程序时,请使用以下方法:

但是,当所有下载完成时,这两种方法都会被调用。我放了 3 个视频供下载,然后将 App 放在后台。下载所有 3 个视频后调用这两种方法。


这是我在这些方法中所做的:

应用委托

下载视图控制器

是否可以在下载每个视频时向用户显示本地通知?或者,我必须等到所有视频在后台完成下载?

如果答案是否定的,那么我的问题是这两个不同回调的目的是什么?是什么将它们彼此分开?