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 请求未执行的主要内容,如果未能解决你的问题,请参考以下文章

关闭时未调用 Alamofire 请求

Alamofire 网络活动指示器未显示

var 请求:Alamofire.Request?使用未声明类型的 Alamofire

Alamofire 会话配置未反映在请求中

AlamoFire GET api 请求未按预期工作

Alamofire JSON 请求未从服务器中提取数据