2016-07-14 17 views
1

キャンセル:ユーザーへの画像のスライドショーを表示するときIOSは、私は次のコードを持っているNSURLConnectionスウィフト

func getStoryContent(cityID : String, completionHandler: (loaded: Bool, dataNil: Bool) ->()) ->() { 
    let scriptUrl = "***" 
    var user_id = "nil" 
    if let userID = NSUserDefaults.standardUserDefaults().stringForKey("userId") { 
     user_id = userID 
    } 
    var params = *** 
    let myUrl = NSURL(string: scriptUrl); 
    let request: NSMutableURLRequest = NSMutableURLRequest(URL: myUrl!) 
    request.HTTPMethod = "POST" 
    let data = params.dataUsingEncoding(NSUTF8StringEncoding) 
    request.timeoutInterval = 10 
    request.HTTPBody=data 
    request.HTTPShouldHandleCookies=false 
    let queue:NSOperationQueue = NSOperationQueue() 
    NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in 
     do { 
      ....code..... 

これはバックグラウンドで実行し、それが基本的に表示される複数の画像をダウンロードし、配列にそれらを追加します画像。問題は、ユーザーがスライドショーをいつでも終了できることです。この場合、キャンセルする必要があります。NSURLConnection。私は、ユーザーがスライドショーを終了したいときに実行される関数を持っていますが、この接続を適切に取り消すためにどのコードを追加するのかわかりません。

答えて

5

NSURLConnectionsendAsynchronousRequestは取り消し可能なリクエストではありません。しかし、NSURLConnectionは廃止されましたが、NSURLSessionを使用する必要があります。 NSURLSessiondataTaskはキャンセル可能です。だから、

、代わりに:

あなたが使用することができます
NSURLConnection.sendAsynchronousRequest(request, queue: queue) { response, data, error in 
    do { 
     ....code..... 
    } 
} 

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 
    do { 
     ....code..... 
    } 
} 
task.resume() 

そして、あなたはそれをキャンセルする必要がある場合は、あなたがtask.cancel()を行うことができます。

+0

これで完了ハンドラを使用することはできますが、それは私にとってはコードの必要な部分です – Alk

+1

はい、上の図と同様です。ただし、パラメータの順序は 'data'で最初に異なることに注意してください。しかしそれ以外は、それは非常に似ています。キューに関しては、 'sharedSession'はデフォルトでシリアルバックグラウンドのキューになります(独自のキューを指定したい場合は' NSURLSessionConfiguration'を使って独自の 'NSURLSession'をインスタンス化できます)。しかし、デフォルトのバックグラウンドキューはおそらく大丈夫でしょう。 – Rob

関連する問題