2016-11-24 6 views
5

バックグラウンドアプリケーションでHttp接続をキャンセルしたいですか?ここでiOSでHTTP接続をキャンセルする

は私のコードです:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let url = URL(string: "my url") 
    let task = URLSession.shared.dataTask(with: url!) { data, response, error in 
     guard error == nil else { 
      print(error) 
      return 
     } 
     guard let data = data else { 
      print("Data is empty") 
      return 
     } 
     do { 
      if let jsonResult = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary { 
       print("ASynchronous\(jsonResult)") 
      } 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 
    } 

    task.resume() 

} 

は、どのように私はプログラム内のどこにそれをキャンセルするには?

+0

task.cancel()またはそれは何を意味していますか? –

+0

'task.cancel()' – Adam

+0

どのようにViewControllerのdefinceタスクですか? – amirelo

答えて

1

これを行う方法は、ローカルの「タスク」ではなくタスクの参照を保持することです。

var taskToReference: NSURLSessionDataTask! 

を次にtaskToReference = URLSession...を行う代わりに、あなたのコードの代わりに、let task = URLSession...を変更:あなたのviewDidLoad外の作成例えば

、。

これで、View Controller内のどこでも使用できるリファレンスvarが作成されました。あなたのクラスのどこかでtaskToReference.cancel()を単に実行してください。

これを行うには、クラス内にvarを作成するのではなく、アプリ全体の任意のビューから行うことができます。AppDelegateで作成し、参照を保持します。アプリのデリゲートで

var taskToReference: NSURLSessionDataTask! 

は、その後、あなたのviewDidLoadで、アプリ全体のVARを参照する前にアプリのデリゲートへの参照を取得:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

その後にあなたの最初のタスクを変更します。

appDelegate.taskToReference = URLSession... 
関連する問題