Как я могу послать многократный запрос URL от делегата NSURLConnection? - PullRequest
4 голосов
/ 24 января 2012

Это логический поток для моего приложения:

  1. Сначала, когда контроллер представления завершил загрузку, затем запрос NSURLConnection может начать свое выполнение

  2. Ответ состоит из данных xml

  3. После анализа этого xml мне нужно отправить еще один NSURLConnection запрос.

  4. После отправки второго запроса, если ответ в порядке, я получаю другие данные XML

  5. После анализа второго XML, я должен проверить некоторые проблемы между первыми и вторыми данными XML.

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

Заранее спасибо.

Ответы [ 3 ]

14 голосов
/ 24 января 2012

Я делаю это с NSURLConnection Создаем их свойства, затем проверяю, какое из них:

 @property (nonatomic,retain) NSURLConnection *myConnection;
@property (nonatomic,retain) NSURLConnection *mySecondConnection;

, затем в делегате:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

     if (connection == myConnection){
       //do something
    }

    if (connection == mySecondConnection){
       // do something else
        }

}

Вы можете передать NSURLRequest всоединение:

self.myConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
1 голос
/ 24 января 2012

Доступна сторонняя библиотека, которая является оболочкой для CFNetwork: ASIHTTPREQUEST

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

0 голосов
/ 24 января 2012
- (void)viedDidLoad{

    [super viewDidLoad];
    [self firstRequestMethod];

}

- (void)firstRequestMethod{

    NSString *myFirstRequestURL = @"<URL>";
    NSURL *webURL = [NSURL URLWithString:myFirstRequestURL];        

    NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSError *error;
    NSURLResponse *response;
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    if(returnData)
    {
        NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
        //Parse your response here.
        //Is desired response obtain call the second Request, as described above
        if (TRUE) {  //on success
            [self secondRequestMethod];
        }

    }



}

- (void)secondRequestMethod{

    NSString *mySecondRequestURL = @"<URL>";
    NSURL *webURL = [NSURL URLWithString:mySecondRequestURL];        

    NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSError *error;
    NSURLResponse *response;
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    if(returnData)
    {
        NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
        //Parse your response here.
        //Is desired response obtain call the second Request, as described above
        if (TRUE) {  //on success
            //subsequent calls to other url, same as above
        }

    }



}

Надеюсь, это поможет вам лучше понять ....

...