2017-12-21 38 views
1

Alamofire에서 일반 API 호출을 호출하고 있으며 네트워킹 관리자 클래스에서이 데이터를 전달하지 않습니다.Alamofire API 요청이 신속하게 responseSerializationFailed와 함께 실패했습니다. 3

내 네트워킹 클래스는

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 

     } 
    } 
} 

하고 responseSerializationFailed

내가 직접 호출하는 경우로 난 내 메인 클래스에서

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) 
      } 
     }) 

그것의 실패 항상 요청할 받고 보여주는 오류를 호출하고 관리자 클래스가없는 메인 클래스

Alamofire.request(kAppAccessTokenURL).responseString { response in 

응답을받을 수 있는데, 누구나 네트워크 클래스에서 잘못되었다고 제게 알릴 수 있습니까? 여기

+0

'Alamofire.request이 (kAppAccessTokenURL가) .responseString'작품에 당신은 당신의 응답이되고 싶어요 때문에 끈. 하지만'Alamofire.request (url) .responseJSON' 호출로 json에 대한 응답을 직렬화하도록 'Alamofire'에게 요청하면 응답이 JSON이 아닌 임의의 문자열이되기 때문에 실패합니다. –

+0

이 문제를 해결하는 방법은 무엇입니까? –

+0

'Alamofire.request (kAppAccessTokenURL) .responseString'에서 무엇을 얻었는지 확인하고 JSON 대신이 응답을 받았다는 것을 서버에 알리십시오 –

답변

1

당신은

Alamofire.request(kAppAccessTokenURL).responseString 

거기

Alamofire.request(url).responseJSON 

모습이

 let jsonText = "{\"first_name\":\"Sergey\"}" 
     var dictonary:NSDictionary? 

     if let data = jsonText.dataUsingEncoding(NSUTF8StringEncoding) { 

      do { 
       dictonary = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject] 

       if let myDictionary = dictonary 
       { 
        print(" First name is: \(myDictionary["first_name"]!)") 
       } 
      } catch let error as NSError { 
       print(error) 
      } 
     } 
+0

나는 거기에 URL을 전달할뿐입니다. @Uma Madhavi –

+0

@umaMadhavi 그 json 데이터는 어떻게 할 수 있습니까? –

+0

응답 문자열이 작동하면 nsdictionary로 변환하십시오. –