发生了一些奇怪的事情。我有两个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)。
答案 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
应该没有问题。如果您仍然无法解决,请考虑使用其他代码编辑您的问题。