Alamofire请求未被执行

时间:2015-10-08 18:10:48

标签: ios swift ios8 ios9 alamofire

发生了一些奇怪的事情。我有两个ViewControllers A&乙

在他们两个中我都使用以下命令导入了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而不执行。在上面的代码中 - "检查1" &安培; "检查3"打印到控制台但不打印"检查2" (对于VC-B)。

2 个答案:

答案 0 :(得分:1)

Alamofire代码是异步的,这意味着当您的print语句可以成功并同步执行时,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

答案 1 :(得分:0)

可能存在很多问题,我们无法判断您是否提供了整个代码。 也许你只是搞乱了代码的其他部分,例如

  • 按钮是否触发了该动作?按钮/操作是否在您的代码/故事板中正确连接?
  • 您是否正确设置了UIViewController中的Storyboard?意思是你正在调用VC-B的viewcontroller? (您的viewDidLoad方法是否被调用?)

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