Как прервать синхронизированный запрос URL в IPhone - PullRequest
0 голосов
/ 19 марта 2011

У меня есть вызов API.Получение ответа от сервера занимает более 2 минут.Как я могу прервать его вручную во время его обработки?

Вот мой код:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setTimeoutInterval: 600.0];
[request setHTTPMethod:@"GET"];

NSMutableDictionary* headers = [[[NSMutableDictionary alloc] init] autorelease];

[headers setValue:@"application/json" forKey:@"Content-Type"];
[headers setValue:@"application/json" forKey:@"Accept"];
[headers setValue:val forKey:@"Authorization"];

[request setAllHTTPHeaderFields:headers];   

NSError *Error;
NSURLResponse *response = [[NSURLResponse alloc] init];

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&Error];

[[NSURLConnection alloc] initWithRequest:request delegate:self];

Как я могу прервать запрос во время его обработки.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 марта 2011

Вы не можете этого сделать, поскольку поток блокируется вашим синхронным запросом.

синхронная загрузка создается поверх кода асинхронной загрузки, предоставляемого классом.Вызывающий поток блокируется, пока асинхронная (sic) система загрузки выполняет загрузку URL-адреса для потока, созданного специально для этого запроса загрузки.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

0 голосов
/ 20 марта 2011

Вы не можете.Используйте асинхронные соединения, если хотите иметь возможность отмены.

Кроме того, кстати, у вас есть некоторые ошибки в вашем коде:

NSError *Error;
NSURLResponse *response = [[NSURLResponse alloc] init];

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&Error];

[[NSURLConnection alloc] initWithRequest:request delegate:self];
  1. Для правильной меры, Error следуетбыть инициализирован на ноль.
  2. Вы просачиваетесь response.Инициализируйте его как ноль, и sendSynchronousRequest:returningResponse:error: заполнит его (в любом случае, если запрос будет выполнен успешно).
  3. Строка [[NSURLConnection alloc] initWithRequest:request delegate:self] запускает асинхронное соединение и освобождает его, после вы ужесделал синхронное соединение по тому же запросу.И это протекает объект NSURLConnection.Вы даже реализовали необходимые методы для неофициального протокола делегирования на вашем self объекте?
...