2016-09-23 8 views
0

Я использую NSURLSession для вызова API сообщений, но когда я поворачиваю Wi-Fi, а затем нажимаю веб-службу и снова включаю Wi-Fi, NSURLSession вызывает тот вызов, который ранее вызывал веб-службу, i хочу остановить этот процесс. я читаю на некоторых документах, которые NSURLSession хранит раздел каждого вызова службы при разрыве соединения в любой ситуации и снова попадает в эту службу, когда соединение установлено снова. Так что теперь я не получаю никакого решения, чтобы остановить этот вызов службы после подключения повторно подключиться к моему устройству. Любой, пожалуйста, помогите мне. Заранее спасибо.Как остановить задачу или раздел из NSURLSession

Ниже приведен код, который я использовал.

  let token: NSString! 

      let urlPath: NSURL! 

      if provider .isEqualToString("No"){ 
       urlPath = NSURL(string: kAPI_SERVERBASEURL + (url as String)) 
      } 
      else{ 
       urlPath = NSURL(string: kAPI_SERVERBASEURLSEARCHPROVIDER + (url as String)) 
      } 

      var postJsonData = NSData() 
      var jsonString = NSString() 

      do { 
       postJsonData = try NSJSONSerialization.dataWithJSONObject(dictRequest, options:[]) 
       jsonString = NSString(data: postJsonData, encoding: NSUTF8StringEncoding)! 
       NSLog("request - %@", jsonString); 

       // do other stuff on success 

      } catch { 
       print("JSON serialization failed: \(error)") 
      } 

      let request = NSMutableURLRequest(URL: urlPath); 
      request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData 
      request.HTTPShouldHandleCookies = false 
      request.timeoutInterval = 120 ; 
      request.HTTPMethod = "POST"; 

      if NSUserDefaults.standardUserDefaults().valueForKey(kAccessToken) != nil{ 

       token = NSUserDefaults.standardUserDefaults().valueForKey(kAccessToken) as! NSString 
       //token = "tk_1vNoEoZRxJwY" 
       request.setValue("\(token)", forHTTPHeaderField: "access_token") 
      } 

      request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
      request.HTTPBody = postJsonData 
      let session = NSURLSession.sharedSession() 
      let task = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in 

`

+0

http://stackoverflow.com/questions/23518690/how-to-find-and- отменить-а-задача-в-nsurlsession – Krumelur

ответ

2

Это может помочь вам.

1.Declare одна переменная о NSURLSessionTask как

var task: NSURLSessionTask? = nil 

2.При когда вам нужно вызвать dataTaskWithRequest назначить объект заявленного объекта как

task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(fileURLWithPath: "")) 

3.when вы хотите отменить запрос просто выполните ниже.

if nil != task { 
    task!.cancel() 
    task = nil 
} 

Предположим, что вы хотите отменить запрос перед вызовом другой объединить оба 2 и 3 шага, как

if nil != task { 
    task!.cancel() 
    task = nil 
} 
task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(fileURLWithPath: "")) 
Смежные вопросы