2016-07-14 2 views
1

У меня есть следующий код:ИОС Отменить NSURLConnection Swift

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. И NSURLSession's dataTask отменяется.

Таким образом, вместо того, чтобы:

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» по умолчанию представляет собой последовательную фоновую очередь (но вы можете создать свою собственную «NSURLSession», используя «NSURLSessionConfiguration», если вы хотите указать свою собственную очередь). Но фоновая очередь по умолчанию должна быть в порядке. – Rob

Смежные вопросы