Alamofire 请求未执行
Posted
技术标签:
【中文标题】Alamofire 请求未执行【英文标题】:Alamofire Request not getting executed 【发布时间】:2015-10-08 18:10:48 【问题描述】:发生了一些奇怪的事情。我有两个 ViewController A & B。
在他们两个中,我都使用以下命令导入了 Alamofire
import Alamofire
问题:我在两个控制器中调用完全相同的 Alamofire 请求。在 VC - A 它执行,在 VC - B - 它只是没有执行..没有错误或任何东西。当我使用断点进行调试时,由于某种原因,整个 Alamofire 代码都被跳过了。似乎无法弄清楚为什么。
下面是我的 Alamofire 代码(这在两个控制器 A 和 B 中都是一样的)
override func viewDidLoad()
super.viewDidLoad()
print("check1")
Alamofire.request(.GET, hubsURL).response request, response, result, error in
print(response)
print("check2")
print("check"3)
上面的代码在执行 ViewController A 时打印响应,但不是针对 View Controller B。对于 viewcontroller B,其他命令仅被执行 Alamofire 没有被执行。在上面的代码中 - “Check 1” & “Check 3” get打印到控制台但不是“检查 2”(对于 VC - B)。
【问题讨论】:
你能在 VC B 中添加围绕 Alamofire 请求调用的代码吗?如果没有更多上下文,很难判断发生了什么 【参考方案1】:Alamofire 代码是异步的,这意味着虽然您的打印语句可以成功并同步执行,但 viewDidLoad 或 viewDidAppear(或其他地方)中的某些函数可能会永远循环,不允许 alamofire.request 执行其关闭。
例如下面这段代码会打印:check1, check3,但是因为viewDidAppear里面的func是阻塞的,Alamofire不能执行它的异步代码。所以在这个例子中,Alamofire 请求什么都不做。如果你把死循环注释掉,代码就可以工作了。
override func viewDidLoad()
super.viewDidLoad()
print("check1")
Alamofire.request(.GET, hubsURL).response request, response, result, error in
print(response)
print("check2")
print("check"3)
override func viewDidAppear(animated: Bool)
while (true != nil)
print("After While")
另外我建议转移到 Alamofire 3.0 https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md
【讨论】:
【参考方案2】:可能有很多问题,如果您不提供完整代码,我们无法判断。 也许你只是弄乱了代码的其他部分,例如
该操作是否由按钮触发?您的代码/故事板中的按钮/动作是否正确连接? 您在Storyboard
中是否正确设置了UIViewController
?意思是您调用VC - B的视图控制器? (你的viewDidLoad
方法被调用了吗?)
还有更多可能性,但如果它适用于 VC - A,Alamofire
应该没有问题。如果您仍然无法解决,请考虑使用其他代码编辑您的问题。
【讨论】:
视图控制器已正确设置。在 View Controller B 中——还有其他正在运行的命令。 alamofire 请求已在 A & B 的 viewDidLoad 方法中发出 在调用Alamofire.request
之前尝试添加print("log")
(或println("log")
用于Swift 1.2)。打印出来了吗?
是的..我在之前和之后尝试过..这些打印命令被打印出来..我已经编辑了我的问题以反映这一点。
它与您用于 VC - A 的 Alamofire
代码段完全相同吗?您可以尝试在 VC - A 中注释代码,然后看看它是否适用于 VC - B?
试过了......仍然没有运气......奇怪的部分是我在另一个 ViewController C 中实现了相同的代码只是为了检查它工作正常......它只是在 VC 中不起作用 - B
以上是关于Alamofire 请求未执行的主要内容,如果未能解决你的问题,请参考以下文章