Могу ли я создать асинхронное NSURL-соединение в базовом «базовом» файле C для целей? - PullRequest
1 голос
/ 09 июля 2011

Я прорабатываю основы Objective-C, я закончил синтаксис, но я до сих пор не делаю какие-то специфические вещи для ios.Во всяком случае, я пытаюсь выяснить HTTP-запросы, и я не могу заставить асинхронный пост работать правильно.

Я могу пойти очень просто (это работает):

NSString *doc = [NSString stringWithContentsOfURL:url usedEncoding:&encoding error:&error];

NSLog(@"%@", doc);

И я могу сделать синхронный запрос (также работает):

NSData *urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];

NSString *doc = [[NSString alloc]initWithData:urlData encoding:NSASCIIStringEncoding];

Но когда я пытаюсь это сделать:

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:url];
connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];

Я не могу заставить работать ни один из методов подключения, такие как didReceiveResponse или didReceiveData.

Итак, вот мои вопросы:

Будет ли то, что я пытаюсь сделать, работать в приложении c командной строкой?

- Делаетделегат должен быть "я"?Могу ли я создать собственный класс «делегата» и добавить методы, такие как:

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"Data");
}

- Если возможен пользовательский делегат, это хорошая идея?Должен ли я присоединить описанный выше метод didReceiveData к какому-либо классу, выполняющему соединение?

-Мне нужно, чтобы какое-то задание выполнялось непрерывно, чтобы моя программа не заканчивалась до того, как ответ поступит?

-Я полностью не лаю?Можете ли вы привести меня в порядок?

Заранее спасибо за ваше время.

1 Ответ

3 голосов
/ 09 июля 2011

NSURLConnection и NSURLRequest являются частью платформы Foundation, поэтому вы должны хорошо использовать их в своей программе. Однако согласно документации NSURLConnection:

Для правильной работы соединения цикл выполнения вызывающего потока должен быть работает в цикле выполнения по умолчанию режим.

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

Делегат не обязательно должен быть «я» - это может быть любой объект, который вам нравится, при условии, что объект реализует соответствующие методы делегата.

Очевидно, что если программа завершит работу до того, как соединение завершит свою работу, ваша программа не получит данные, которые она искала.

...