2017-03-14 3 views
0

タイムアウトの要求がなくなった場合、前の画面に戻るようにネットワークセッションクリエータを設定しようとしています。現在のところ、どこでどのように実行するかは完全にはわかりません。タイムアウトリクエスト後に前の画面に戻るにはどうすればよいですか?

lazy var configuration: URLSessionConfiguration = URLSessionConfiguration.default 

    lazy var session: URLSession = URLSession(configuration: self.configuration) 

typealias JSONData = ((Data) -> Void) 

    func getJSONData(type: String, urlExtension: String, completion: @escaping JSONData) { 

    configuration.timeoutIntervalForRequest = 5 
    configuration.timeoutIntervalForResource = 5 

    let request = URLRequest(url: URL(string:"\(baseURL)\(type)/\(urlExtension)?api_key=\(apiKey)")!) 

    let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) in 

     if error == nil { 
     if let httpResponse = response as? HTTPURLResponse { 
      switch (httpResponse.statusCode) { 
      case 200: 
      if let data = data { 
       completion(data) 
      } 
      default: 
      print(httpResponse.statusCode) 
      } 
     } 
     } else { 
     print("Error: \(error?.localizedDescription)") 
     } 
    }) 
    dataTask.resume() 
    } 
+0

あなたはUINavigationControllerを使用していますか? –

+0

私はUINavigationControllerを使用しています – SwiftyJD

答えて

0
lazy var configuration: URLSessionConfiguration = URLSessionConfiguration.default 

    lazy var session: URLSession = URLSession(configuration: self.configuration) 

typealias JSONData = ((Data) -> Void) 

    func getJSONData(type: String, urlExtension: String, onSucceed : @escaping JSONData , onFailure: @escaping (_ error:NSError)-> Void) { 

    configuration.timeoutIntervalForRequest = 5 
    configuration.timeoutIntervalForResource = 5 

    let request = URLRequest(url: URL(string:"\(baseURL)\(type)/\(urlExtension)?api_key=\(apiKey)")!) 

    let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) in 

     if error == nil { 
     if let httpResponse = response as? HTTPURLResponse { 
      switch (httpResponse.statusCode) { 
      case 200: 
      if let data = data { 
       onSucceed(data) 
      } 
      default: 
      print(httpResponse.statusCode) 
      } 
     } 
     } else { 
     onFailure(error! as NSError) 
     } 
    }) 
    dataTask.resume() 
    } 

ビューコントローラには、あなたが、私はこのようにそれを使用することになり、このメソッドを呼び出します。ここでは、コードです。

NetworkManager.getJSONData(type: "", urlExtension: "",onSucceed { 
    //doSmth 
}, on Failure{(error) in 
    //show Error 
// if it is pushed 
    _ = self.navigationController?.popViewController(animated: true) 

// or if its presented 
// self.navigationController?.dismiss(animated: true, completion: nil) 

} 
+0

このリクエストはシングルトン内で行われましたが、viewcontrollersによってアクセスされました – SwiftyJD

+0

私は自分の答えを編集しました、私は2つのクロージャを追加しました。ケースに応じて、それらの両方を管理することができます。 – unniverzal

+0

私はこれを答えとしてマークしました。 – SwiftyJD

0

これを試すことができます。これは私

_ = self.navigationController?.popViewController(animated: true) 

のために働いている、これは結果として、あなたの前の画面が表示されます、UINavigationControllerスタックから最上位UIViewControllerをポップアップ表示されます。

0

あなたが使用することができますあなたの現在のVCを取得するには、showセグエを使用した場合:あなたが使用するモーダルセグエを使用した場合

_ = self.navigationController?.popViewController(animated: true) 

_ = self.navigationController?.dismiss(animated: true) 
関連する問題