отменить NSURLConnection в ios

Я mapView webservice на mapView drag / mapView . Я хочу сохранить задержку в вызовах веб-службы. Поэтому я хочу, чтобы всякий раз, когда пользователь перетаскивал карту несколько раз, все предыдущие вызовы веб-сервисов должны быть отменены, и нужно только запустить вызов последнего веб-сервиса.

Как мне это сделать?

Ниже приведен мой код:

 { .... NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[data length]]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:data]; [request setHTTPMethod:@"POST"]; NSMutableDictionary __block *dictResponse; [[NSOperationQueue mainQueue] cancelAllOperations]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if(connectionError == nil){ dictResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&connectionError]; } 

  • Как загрузить изображение с помощью json?
  • Установка тайм-аута для NSMutableURLRequest для пользовательского времени
  • «DataTaskWithRequest» запрашивает NSMutableRequest дважды, когда требуется только один запрос
  • NSMutableURLRequest добавляет дополнительные заголовки в url только для iOS 8
  • Запрос на веб-сервис через SSL
  • Установите NSDictionary в HTTPBody и отправьте с помощью метода POST
  • Как удалить заголовки в NSMutableURLRequest?
  • Отправить запрос удаления http
  • 2 Solutions collect form web for “отменить NSURLConnection в ios”

    Вы не можете отменить sendAsynchronousRequest . Если вы использовали запрос NSURLConnection основе NSURLConnection , вы можете отменить его, но (а) это больше кода, чем вы, вероятно, захотите побеспокоить; (b) NSURLConnection устарел, поэтому вы должны быть NSURLSession любом случае; и (c) NSURLSession позволяет отменить задачу, используя ссылку NSURLSessionTask которая возвращается вам:

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setHTTPBody:data]; [request setHTTPMethod:@"POST"]; NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"connection error = %@", error); return; } NSError *parseError; NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&parseError]; if (!responseObject) { NSLog(@"parse error = %@", parseError); } dispatch_async(dispatch_get_main_queue(), ^{ // use response here; eg, updating UI or model objects }); }]; [task resume]; 

    Если вам нужно отменить этот запрос, просто позвоните [task cancel] . Поэтому сохраните эту NSURLSessionTask в некоторой слабой переменной, если вы хотите ее отслеживать и отменить ее позже.

    Не используйте API-интерфейс sendAsynchronousRequest , используйте основной API-интерфейс делегата, чтобы у вас был доступ к экземпляру NSURLConnecyion для cancel вызова.

    Кроме того, не отменяйте операции в главной очереди, вы не знаете, что там есть, и подумайте об использовании NSURLSession

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.