iOS NSURLConnection сделалReceivedData более одной задачи

У меня большая проблема с iOS. По некоторым причинам я должен использовать асинхронный режим, потому что я хочу передать ошибку SSL. Итак, я использую NSURLconnection и получаю данные ответа с веб-сервера в didReceiveData. и это работает очень хорошо, когда я просто отправляю один URL-адрес на сервер.

Но мой вопрос: если мне нужно отправить 2 или 3 разных URL-адреса на сервер одновременно! то получаю данные ответа в didReceiveData, думаю будет путаница! Как я могу узнать, какие данные ответа принадлежат какой почтовой задаче?? Кто-нибудь может мне помочь? Пожалуйста спасибо.


person user3286613    schedule 24.07.2014    source источник
comment
Используйте параметр NSURLConnection каждого метода делегата, чтобы узнать, для какого соединения предназначен ответ.   -  person rmaddy    schedule 24.07.2014
comment
rmaddy, можете ли вы дать мне пример кода для параметра NSURLConnection каждого делегата, и мне нужно написать разные didReceiveData?   -  person user3286613    schedule 24.07.2014


Ответы (1)


Для этого вам нужно проверить свои connection в методах делегата NSURLConnection. & использовать два разных resposeData.

Пример: здесь два соединения connSend и connRecieve

При использовании connSend

NSURL *url = // Your URL
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
connSend=[[NSURLConnection alloc] initWithRequest:requestObj delegate:self];

И для другого соединения

NSURL *url = // Your URL
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
connRecieve =[[NSURLConnection alloc] initWithRequest:requestObj delegate:self]




- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    if (connection==connSend) {
        responseSend = [[NSMutableData alloc]init];
        [responseSend setLength:0];
    }
    else{
        responseData = [[NSMutableData alloc]init];
        [responseData setLength:0];
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    if (connection==connSend) {
        [responseSend appendData:data];
    }
    else{
        [responseData appendData:data];
    }
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    if (connSend==connection) {
       NSLog(@"Error in sending");
    }
    else{
        NSLog(@"Error in receiving");
    }
}

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

    if (connection==connSend) {
    // Connection send.
    }
    else{
    // Connection recive
     }

}

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

person Toseef Khilji    schedule 24.07.2014
comment
connSend записывается в: NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest: делегат запроса: connSend]; делегат: сам => делегат: connПравильно отправить? спасибо - person user3286613; 24.07.2014
comment
Сделайте NSURLConnection глобальным. - person Toseef Khilji; 24.07.2014
comment
NSURLConnection *connSend1 = [[NSURLConnection alloc] initWithRequest: делегат запроса: сам]; NSURLConnection *connSend2 = [[NSURLConnection alloc] initWithRequest: делегат запроса: сам]; Правильно? спасибо - person user3286613; 24.07.2014
comment
Да, но объявите connSend1 и connSend2 в файле .h. так что вы можете сравнить его в методах делегата, - person Toseef Khilji; 24.07.2014
comment
Я новичок! Пожалуйста, подробно... извините - person user3286613; 24.07.2014
comment
Хорошо, я попробую .. очень признателен ^^ - person user3286613; 24.07.2014