Как отправить асинхронный запрос URL?
Я хотел бы знать, как получить возвращаемое значение 1 или 0 только.... обратно из URL-запроса асинхронно.
в настоящее время я делаю это следующим образом:
NSString *UTCString = [NSString stringWithFormat:@"http://web.blah.net/question/CheckQuestions?utc=%0.f",[lastUTCDate timeIntervalSince1970]];
NSLog(@"UTC String %@",UTCString);
NSURL *updateDataURL = [NSURL URLWithString:UTCString];
NSString *checkValue = [NSString stringWithContentsOfURL:updateDataURL encoding:NSASCIIStringEncoding error:Nil];
NSLog(@"check Value %@",checkValue);
это работает, однако он блокирует мой основной поток, пока я не получил ответ от URL-адреса, как его установить, чтобы он выполнял его в другом потоке вместо основного потока?
EDIT: ANSWER
Я завершаю свою функцию этим, он хорошо работает:)
[self performSelectorInBackground:@selector(shouldCheckForUpdate) withObject:nil];
Ответы
Ответ 1
вы можете использовать NSURLConnection
class
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
и обрабатывать его ответ и ошибки, используя его методы делегирования.
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
Вы можете найти реализацию NSURLConnection
Изменить: Хотя NSURLConnection
предоставляется apple, рекомендуется использовать URL-адрес. Но я обнаружил, что библиотека AFNetworking
очень экономична, проста в применении и надежна, но проста, как реализация сторонних разработчиков. Вы должны попробовать.
Ответ 2
попробуйте следующее:
.h:
NSMutableData *responseData;
.m:
- (void)load
{
NSURL *myURL = [NSURL URLWithString:@"http://www.example.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
responseData = [[NSMutableData alloc] init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[responseData release];
[connection release];
[textView setString:@"Unable to fetch data"];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Succeeded! Received %d bytes of data",[responseData
length]);
NSString *txt = [[[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding] autorelease];
}
Ответ 3
Используйте NSURLConnection
и сделайте свой запрос.
Затем вы можете запустить синхронное или асинхронное соединение с методами NSURLConnection:
Загрузка данных синхронно
+ sendSynchronousRequest:returningResponse:error:
Загрузка данных асинхронно
+ connectionWithRequest:delegate:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
– start
Проверьте класс NSURLConnection
в Справочнике API разработчика Apple.
Ответ 4
Бесстыдно скопировать из https://gist.github.com/knmshk/3027474. Все кредиты отправляются https://gist.github.com/knmshk.
xmlData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:
@"http://forrums.bignerdranch.com/smartfeed.php?"
@"limit=NO_LIMIT&count_limit20&sort_by=standard&"
@"feed_type=RSS2.0&feed_style=COMPACT"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
if (error) {
xmlData = nil;
NSLog(@"error:%@", error.localizedDescription);
}
[xmlData appendData:data];
}];
Ответ 5
В документации iOS XCode называется LazyTableImages. Это делает асинхронный URL-адрес, а также асинхронную загрузку изображения в ячейки UITableView
, отображаемые на экране после прокрутки. Отличный пример протоколов, асинхронная обработка данных и т.д.