【发布时间】:2018-06-04 01:42:48
【问题描述】:
我正在使用 Alamofire 调用正常的 API 调用,并且我没有在网络管理器类中传递任何数据。
我的网络课程是
func executeGetRequest(url:String,requestVC:UIViewController,completionHandler:@escaping (_ responseObject:Any?) -> Void!,failureHandler:@escaping (_ connectionError:NSError?) -> Void!){
//Checking internet alert
if !self.isConnectedToInternet(){
// requestVC.showAlert(kText_AppName, message: kText_NoInternet)
return
}
requestVC.showLoader()
Alamofire.request(url).responseJSON {
(response:DataResponse) in
requestVC.removeLoader()
switch(response.result) {
case .success(_):
if response.result.value != nil{
completionHandler (response.result.value)
}
break
case .failure(let error):
failureHandler (error as NSError?)
break
}
}
}
我是从我的主课中调用它
kNetworkManager.executeGetRequest(url: kAppAccessTokenURL, requestVC: self, completionHandler: {
(responseObject) -> () in
print("responseObject:\(responseObject!)")
}, failureHandler: {(error)-> () in
print("response object:\(error!)")
self.showAlert(message: (error?.description)!, title: kText_AppName)
if error?._code == NSURLErrorTimedOut {
//timeout here
self.showAlert(message: kText_timeout, title: kText_AppName)
}
})
它总是请求失败并显示错误为responseSerializationFailed
如果我直接在主类中调用而没有像
这样的管理器类Alamofire.request(kAppAccessTokenURL).responseString { response in
我能够得到回应,谁能建议我在网络课程中哪里出错了。
【问题讨论】:
-
Alamofire.request(kAppAccessTokenURL).responseString之所以有效,是因为您希望您的响应是一个字符串。但是,当您要求Alamofire将响应序列化为 json 即调用Alamofire.request(url).responseJSON时,它会失败,因为您的响应不是 JSON,而是一些随机字符串 -
那么,如何解决这个问题?
-
检查你在
Alamofire.request(kAppAccessTokenURL).responseString中得到了什么,并告诉你的服务员你得到的是这个响应而不是 JSON -
api 的响应是什么?可能是您获得对象数组而不是标准字典。就像@InderKumarRathore 指出的那样,使用字符串就可以了。
标签: ios iphone swift web-services alamofire