gpt4 book ai didi

ios - Alamofire 请求未被执行

转载 作者:行者123 更新时间:2023-11-28 06:57:28 25 4
gpt4 key购买 nike

奇怪的事情发生了。我有两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com