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),或者,如果您定义了自己的配置,请确保在某个位置保留静态引用。这样,实例就可以全局访问,并且不会创建可能的保留周期。