【问题标题】:How to set variables in URLSession data task?如何在 URLSession 数据任务中设置变量?
【发布时间】:2017-02-08 12:14:50
【问题描述】:

我正在尝试使用两个文本框(用户名和密码)登录。我将这两个变量发送到 Web 服务以检查是否有用户名和密码可用。对于这两个值,我从 Web 服务收到消息“成功”或“失败”的响应。然后我正在获取该消息并使用该消息设置标志值。但是在会话之后我没有得到那个标志值。它显示默认值 false。

问题是我想登录按钮操作,该操作将使用 URLSession 和数据任务调用 Web 服务,但我无法设置标志。我可以使用 NSURL 同步请求来做到这一点,但该代码已被弃用。

您可以查看登录按钮操作功能和网络服务功能的代码图像。 login button action web service function

提前谢谢你。

【问题讨论】:

  • 我们不会单击链接并查看代码图像。在此处发布带有代码标签的相关代码。问题几乎可以肯定是您的登录任务是异步的,并且在调用完成处理程序或委托方法之前结果将不可用。因此,您需要重组代码,但在您发布代码之前,我们无法告诉您如何重组代码。

标签: ios swift xcode web-services nsurlsession


【解决方案1】:

您使用方法webServiceCalledMethod 的方式是错误的。与URLSession 关联的任务是异步执行的。因此,isLogin 变量会在您的 dataTask 执行之前返回。

不要从异步方法返回 Bool,而是使用闭包或委托模式来通知数据任务完成状态。

【讨论】:

  • 是的,完全正确。它在任务执行之前返回。我检查了它。是的,它是异步方法。这就是为什么我尝试使用 NSURL 的同步方法但它已被弃用。它给出的建议是我应该使用 URLSession。但我无法理解会话是异步的还是同步的。最后我用信号量来等待时间。非常感谢。
  • 不,也不要使用信号量。那仍然会阻塞主线程。您想重构代码以传入一个完成块,该块在异步任务完成后被调用。你需要停下来仔细阅读这个概念,直到你理解它。
  • @DuncanC 如果您对此有任何其他解决方案,请告诉我?
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多