Alamofire请求不被执行

有些奇怪的事情正在发生。 我有两个ViewControllers A和B.

在他们两个我使用下面的命令导入Alamofire

import Alamofire 

问题:我在这两个控制器中调用完全相同的Alamofire请求。 在VC – A它执行,在VC – B – 只是不执行..没有任何错误或任何东西。 当我使用断点进行debugging时,由于某种原因,整个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”被打印到控制台但不是“检查2”(VC-B)。

可能有很多问题,我们不能分辨你是否不提供整个代码。 例如,也许你只是混淆了代码的其他部分

  • 这个动作是由一个button触发的吗? 您的代码/故事板中的button/操作是否正确连接?
  • 你是否正确地设置StoryboardUIViewController ? 意思是你正在调用VC-B的视图控制器? (您的viewDidLoad方法是否被调用?)

还有更多的可能性,但如果它适用于VC-A, Alamofire应该不会有问题。 如果仍然无法解决,请考虑使用其他代码编辑您的问题。

Alamofire代码是asynchronous的,这意味着当您的打印语句可能成功并同步执行时,viewDidLoad或viewDidAppear(或其他地方)中的某个函数可能永远循环,不允许alamofire.request执行其闭包。

例如下面的代码将打印:check1,check3,但是由于viewDidAppear中的func被阻塞,Alamofire无法执行其asynchronous代码。 所以在这个例子中,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") } 

另外我会build议移动到Alamofire 3.0 https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md