ios - Alamofire 请求未被执行

标签 ios swift ios8 ios9 alamofire

奇怪的事情发生了。我有两个 ViewControllers A 和 B。

在它们中我都使用下面的命令导入了 Alamofire

import Alamofire

问题:我在两个 Controller 中调用完全相同的 Alamofire 请求。在 VC - A 它执行,在 VC - B - 它只是不执行..没有错误或任何东西。当我使用断点进行调试时,由于某种原因跳过了整个 Alamofire 代码。似乎无法弄清楚为什么。

下面是我的 Alamofire 代码(这在 Controller 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”得到打印到控制台但不是“Check 2”(对于 VC - B)。

最佳答案

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

例如下面这段代码会打印:check1, check3,但是因为 viewDidAppear 里面的函数是阻塞的,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

关于ios - Alamofire 请求未被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023046/

相关文章:

iphone - 您如何将时间用作核心图图中的轴?

ios - 如何在字符的第一个实例之后剥离 NSString 的一部分?

ios - 获取用户的当前位置/坐标

swift - 如何将 View 按钮/标签连接到 Xcode 11 中的 Controller 文件?

iphone - xcode 6 上的启动屏幕 - ios 8

ios - 返回时发生奇怪的崩溃

ios - 如何根据对应的UIImageView的尺寸来决定1x、2x、3x的图片尺寸?

swift - Swift 中的 Base-10 float

ios - 如何使用自动布局设置按钮宽度并针对 iPhone 6 plus 进行调整?

ios - 将图像上传到 Firebase 并获取引用