2013-05-06 12 views
5

Mam dwie prośby, rozpoczynając jedną po drugiej. Taka prośba początkowa wygląda następująco:Rozróżnianie między obiektami NSURLConnection w delegacie

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com"]]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 
NSURLConnection * connection = [[NSURLConnection alloc] 
           initWithRequest:request 
           delegate:self startImmediately:NO]; 
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
[connection start]; 

oraz inne żądanie rozpoczynające się w ten sposób.

NSURL *url1 = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.apple.com"]]; 
NSURLRequest *request1 = [NSURLRequest requestWithURL:url1 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 
NSURLConnection *connection1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self]; 
[connection1 release]; 

Jak mogę rozróżnić te dwie metody delegatów?

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

Nie należy przechowywać żadnych dodatkowych zmiennych klasy do tego celu.

+0

Sprawdź, czy argument "połączenie" w metodzie wywołania zwrotnego jest równy zmiennym 'connection' lub' connection1' w kodzie. – Markus

Odpowiedz

4

To proste:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    if (connection == connection1) 
    { 
     //It's for connection1. 
    } 
    else if (connection == connection2) 
    { 
     //It's for connection2. 
    } 
} 

Możesz przejść przez ten piękny SO pytanie: Managing multiple asynchronous NSURLConnection connections

+0

W takim przypadku muszę zachować dwie zmienne klasy Connection1 i Connection 2, ponieważ oba połączenia mogą działać jednocześnie. Próbuję unikać tych dodatkowych zmiennych. – NaXir

+0

W takim przypadku, czy mogę zapytać, dlaczego używasz tego starego podejścia? – Bhavin

+0

Znalazłem to łatwe. Czy podzielisz się nowym podejściem? – NaXir

2

zabrać NSURLConnection obiektów w pliku .h i sprawdzić w swojej metodzie delegata jako Markus zasugerował.

lub

Podklasa swój NSURLConnection a następnie można dodać tag obiekt do klasy podczas tworzenia połączenia, w delegować metody sprawdzenia odpowiedniego znacznika. Możesz znaleźć working tutorial here.

Powiązane problemy