问题标签 [urlsession]

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 投票
3 回答
1122 浏览

ios - 将对象从 URLSession 传递到 ViewController

我正在尝试将我创建的对象detail从名为 RestManager.swift 的 swift 文件中调用到 ViewController 中。该对象包含所有元素,但是当我在视图控制器中调用它时,它是空的。根据我在网上收集的信息,它可能与在后台线程上工作的 URLSession 有关

我的 RestManager.swift 看起来像这样。

我的视图控制器看起来像这样:

0 投票
1 回答
7932 浏览

ios - 在 swift 3 中使用 urlsession 在 http 标头中发送不记名令牌的问题

我正在使用 urlsession 在标头中发送不记名令牌,但我总是得到未经授权的结果。我看过服务器日志。我在那里得到身体,但不是标题。

我也试过request.setValue("Bearer " + key, forHTTPHeaderField: "Authorization")

0 投票
1 回答
609 浏览

ios - swift 3+,URLsession,在后台显然随机失败

我对 swift(1 周)和 iOS 编程相当陌生,我的问题是我似乎错过了一些基本的理解。下面您会看到一个由后台通知触发的功能。我可以并且已经验证我可靠地收到后台通知并且应用程序处于活动状态(在控制台上打印输出原始数据值)只要应用程序在前台一切都按预期工作,它就会被触发并发送单个 https 请求。背景触发器每分钟都有一个计时器。

现在,当应用程序进入后台时,整个事情都发生了变化。在这种情况下,我仍然通过通知(控制台打印输出)获得触发器,并且我可以在调试器中看到与前台的魅力相同的功能。它仍然有效,它仍然会被触发,但数据包的发送频率只是如此频繁,似乎在 2 到 30 分钟之间随机发送。

0 投票
2 回答
1054 浏览

ios - 如何传递给循环调用的 URLSession.shared.dataTask?

我正在从服务器下载图像,下载图像时,我必须将该图像保存在带有 id 的 coredata 中。这是代码

(actionDict["Id"].intValue是与我想用图像保存在 coredata 中的图像相关联的 id,但是当我保存它时,它总是设置为 for 循环的最后一个项目 id。

actionData

回应

请提供任何可以解决我的问题的解决方案。

0 投票
0 回答
1307 浏览

ios - iOS 上网络呼叫的优先级

我想利用 iOS 上网络调用的良好优先级。

到目前为止,我正在使用URLSessionTask.priority. 我创建这样的网络调用:

问题是我仍然看到优先级为 0.0 的下载任务一旦开始就会从优先级为 1.0 的任务中承担大量负载(高达约 60%)。有时,优先级为 1.0 的调用仅在完成大量低优先级请求时才开始。苹果的(文档)证实:

要向主持人提供有关如何为您的应用程序中的 URL 会话任务优先级的提示,请为每个任务指定优先级。指定优先级仅提供提示,并不能保证性能。[...] 没有 API 可以让您从主机的角度确定任务的有效优先级。

我想实现假定下载和缓存,而不降低用户发起请求的性能。这对于连接性较差的设备尤其重要。

我考虑过的解决方案:

  • 使用 Alamofire(但 afaik 他们也没有优先级)
  • 创建一个自定义解决方案,只允许n并行下载,具有优先级队列,并在高优先级请求进入时中止/暂停非常低优先级的请求。不过,对我来说,这听起来像是必须已经存在的东西,也有点像如果实施不当,这是一种将自己射中脚的绝妙方法。

我考虑过的替代方案:

  • 仅在最重要的呼叫完成后才开始不太重要的呼叫
  • 根本不要在连接不良时发出请求(后续问题是如何识别不良连接)

我支持 iOS 9 和更新版本,但也会考虑不适用于 iOS 9 的解决方案。

0 投票
0 回答
334 浏览

ios - 尝试在 URLSessionDownloadTask 中添加新文件名完成

我正在下载一些文件,并在下载完成后尝试保存文件。现在我尝试在文件已经存在时建议一个新名称。这是我的代码:

如果文件已经存在,我会收到关于error moving file如何建议新名称的错误?例如,如果file.zip在文档目录上,新文件名应该是file(2).zip

0 投票
0 回答
506 浏览

ios - 即使使用 Dispatch Queue,URLSession 对请求的响应也确实很慢

我正在使用 DispatchQueue 方法,但我没有体验到更快的响应时间,我说错了吗?

0 投票
2 回答
929 浏览

ios - URLSession 产生 NIL 数据

我正在尝试学习 Swift,并且我有一个使用 Google 的 Places API 的小项目。

我有一个获取地点详细信息的方法,它使用 URLSession 快速发送请求:

我使用这个方法创建了一个餐厅类型的实例,稍后我将把它添加到一个列表中:

但是每当我回到“ let rest = Restaurants(...) ”时,所有的值都是零。当我尝试调试它时,它只是跳过我的“ _ = session ”部分一直到resume(),然后再次回到 session 并在resume()结束。没有产生数据。我很困惑,因为我之前成功执行了这段代码,现在我想知道我是否遗漏了什么。谢谢 :-)

0 投票
0 回答
396 浏览

swift - 在 Swift 中为 URLSession 定义完成处理程序的最佳方法

我有一个 URLSession 的调用:

其中 updatePlaces 是一个定义为的函数:

我将它拆分为另一个函数,因为我真的不喜欢将它作为一大块代码,而我的“updatePlaces”函数作为我原始 session.dataTask 中的闭包。它似乎在一个功能中做得太多。我想把它分开。

我也可以使用下面的语法创建一个闭包,但我看不出这和函数之间没有区别(我知道函数是一种特殊类型的闭包,我看不出有什么区别):

但是,您之前看到我添加someVar到范围。使用函数和惰性 var,我无法访问someVar. 但是,如果我在 session.dataTask 中进行关闭,则会捕获 someVar,我可以根据文档引用它:

闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。这被称为关闭这些常量和变量。Swift 为您处理所有捕获的内存管理。

所以...我有两个具体问题。

我的函数声明和我的闭包声明之间是否有任何区别,只是将其传递给完成处理程序。

如果我没有在其中定义闭包,有什么方法可以捕获原始函数中的引用?我猜不是。

还有一个更...一般的问题:处理这个问题的首选方法是什么?

0 投票
2 回答
472 浏览

ios - 跨同一服务器的不同 REST 端点的 URLSession

我有一个应用程序可以从一堆不同的视图控制器对同一服务器进行一大堆不同的 REST 调用。关于以下方面的最佳做法是什么URLSession:共享相同的 URLSession 对象?还是只是 URLSessionConfiguration 对象?还是两者都无所谓?

例如,当向端点发出请求时,我应该

  1. URLSession使用共享实例化一个全新的每个请求URLSessionConfiguration

  2. 为当前活动的应用程序实例实例化URLSession一次,并在所有请求中重用它?