2013-03-14 4 views
0

У меня есть два объекта NSURLRequest, подключающихся к веб-сервису и вызывающих 2 разных сервиса.Работа с несколькими NSURLRequest

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

NSString *[email protected]"http://localhost:8080/stmanagement/management/retrieve_dataA/?match_link="; 
NSString *uria = [urla stringByAppendingString:self.lien_match]; 
NSURL *urlla= [ NSURL URLWithString:uria]; 
NSURLRequest *requesta =[ NSURLRequest requestWithURL:urlla]; 

NSString *[email protected]"http://localhost:8080/stmanagement/management/retrieve_dataB/?match_link="; 
NSString *urib = [urlb stringByAppendingString:self.lien_match]; 
NSURL *urllb= [ NSURL URLWithString:urib]; 
NSURLRequest *requestb =[ NSURLRequest requestWithURL:urllb]; 

connectiona=[NSURLConnection connectionWithRequest:requesta delegate:self]; 
connectionb=[NSURLConnection connectionWithRequest:requestb delegate:self]; 

if (connectiona){ 
    webDataa=[[NSMutableData alloc]init]; 
} 

if (connectionb){ 
    webDatab=[[NSMutableData alloc]init]; 
} 

Правильно, что я делаю? Должен ли я добавить небольшой разрыв между двумя NSURLRequest?

Потому что при каждом представлении вида я получаю случайный результат. (Я устанавливаю результаты на два объекта UITableView).

+1

@glektrik ваша размещенная тема с 2008 года! Есть абсолютно некоторые вещи, которые изменились .... – androniennn

+0

Ваша проблема в том, что вы возвращаете результаты от обоих запросов, возможно, от второго (connectionb), и вы не можете понять, какой вид таблицы для их размещения в? – Nate

+0

@androniennn вещи действительно изменились - НО - правильные ответы обычно остаются в силе. – Till

ответ

2

Я думаю, что ваша «проблема» заключается в том, что self является делегатом связи для и ваших соединений. Эти типы соединений являются асинхронный, так что нет никакой гарантии, что будет завершена до B. Ваш код должен обрабатывать любой удобной для данных веб-сервер возвращает в.

Я полагаю, вы могли бы сделать эти два метода синхронное (ДОН 't запустите B до тех пор, пока A не завершится), но я не думаю, что есть действительно нужно для этого.

Хорошей новостью является то, что обратные вызовы NSURLConnectionDelegate передают вам объект NSURLConnection, поэтому вы можете использовать это, чтобы определить, получаете ли вы ответ на A или B. Эта информация должна рассказать вам, следует ли помещать данные в A или веб-объект данных B, и следует ли обновлять представление таблицы A или B, когда запрос завершается. Например:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    // determine which request/connection this is for 
    if (connection == connectiona) { 
     [webDataa appendData: data]; 
    } else if (connection == connectionb) { 
     [webDatab appendData: data]; 
    } 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // determine which request/connection this is for 
    if (connection == connectiona) { 
     NSLog(@"Succeeded! Received %d bytes of data",[webDataa length]); 
     // TODO(?): update the data source for UITableView (A) and call: 
     [tableViewA reloadData]; 
    } else if (connection == connectionb) { 
     NSLog(@"Succeeded! Received %d bytes of data",[webDatab length]); 
     // TODO(?): update the data source for UITableView (B) and call: 
     [tableViewB reloadData]; 
    } 

    // release the connection* and webData* objects if not using ARC, 
    // otherwise probably just set them to nil 
} 

Это решение требует от вас держать connectiona и connectionb, как стойкие Ивар, а не локальные переменные в коде, публикуемую. Похоже, вы это делаете, но, поскольку вы не показываете свое заявление, я просто хотел быть уверенным.

Вы также должны указать implement the other delegate callbacks, of course, но приведенные выше два должны дать вам хороший пример общего решения.

+0

Ты лучший! Огромное спасибо! ты сделал мой день :)). Два дня с этой проблемой: /. Спасибо тебе ... :))) – androniennn

Смежные вопросы