Swift 关于用于管理器的Alamofire版本

Swift 关于用于管理器的Alamofire版本,swift,alamofire,Swift,Alamofire,我使用这个代码 var apiPath : String = "/api/list/" let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.timeoutIntervalForRequest = 60 let manager = Alamofire.Manager(configuration: configuration) manager.session.configu

我使用这个代码

var apiPath : String = "/api/list/"
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 60
let manager = Alamofire.Manager(configuration: configuration)
manager.session.configuration.HTTPAdditionalHeaders = ["_token" : self._token]
manager.request(.GET, self._host + self._url + apiPath, parameters: nil)
    .responseSwiftyJSON ({ (request, response, resultJson, error) in
        if (resultJson["Success"]) {
             //get list success
        } else {
            println("request : \(request)")
            println("response : \(response)")
            println("resultJson : \(resultJson)")
            println("error : \(error)")
        }

})
我遇到了一些问题

阿拉莫菲尔版本1.2.1:没问题

阿拉莫菲尔版本1.2.2和1.2.3:

request : { URL: https://test.com/api/list/ }

response : nil

resultJson : null
错误:可选(错误域=nsurErrorDomain代码=-999“已取消” UserInfo=0x7feb92c434f0{nserrorfailingurkey=https ://test.com/api/list/,NSLocalizedDescription=已取消, NSErrorFailingURLStringKey=http://s.com/api/list/})

为什么在版本1.2.2和1.2.3上响应为nil而resultJson为null
请帮助我这段代码中有什么问题。

在将Alamofire从1.2.1更新到1.2.3后,我今天遇到了与您相同的问题

通过在responseJSON块的末尾和内部添加“manager.session.invalidateAndCancel()”我发现解决了这个问题。但我无法理解的是,responseJSON块中的这行代码如何影响responseJSON结果


无论如何,我将运行此修复程序,直到Alamofire团队修复它或有人向我解释为什么会发生这种情况。

我注意到您的API端点指示安全连接:

httpS://test.com/api/list/

试一试,以防万一,也许它会重复你的情况

在我的例子中,这是API管理器代码中的一个输入错误。从这一部分可以说是连接了应用程序传输安全设置

刚刚将受保护协议从
httpS://
更改为
http://
,错误为:

NSURErrorDomain代码=-999“已取消”

他走了,一切都正常了


+如果你有类似的问题。请务必与负责应用程序服务器或API配置的后端专家讨论此问题。这意味着服务器没有有效的安全证书。也许你仍然需要一个安全的连接。或者,这位专家可以再次将所有内容从
http://
配置回
httpS://
,我不确定(没有检查)当您在代码中已经使用不安全的
http://
连接时,这是否会再次工作。

并且
Alamofire.request没有问题(…
,为什么?因为我想设置为请求超时,像这样,'configuration.timeoutitervalforrequest=60'是的,我想设置头字段,所以同样的问题。请求被取消,因为身份验证质询失败。你能看一下我的代码吗?我仍然无法修复它…这是因为这行带有确保e manager将一直保留到内部块被执行为止。基本上,您创建了一个保留周期来“修复”问题。真正的问题是,管理器在到达带有该行的响应块之前被释放。您需要确保保留对该管理器的引用。@KevinR-您如何确保保留对该管理器的引用e manager?@raklos您可以使用默认的管理器(如果使用4.0或更高版本,则使用sharedManager),或者,如果您定义了自己的配置,请确保在某个位置保留静态引用。这样,实例就可以全局访问,并且不会创建可能的保留周期。