2009-09-12 6 views

Répondre

12

Enregistrez les deux objets NSURLConnection en tant que variables membres de l'objet délégué que vous avez passé à connectionWithRequest: delegate :. Ensuite, vous pouvez les comparer chacun de ceux du NSURLConnection passé à connectionDidFinishLoading :, et répondre de façon appropriée:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    if (connection == firstConnection) { 
     // do something 
    } 
    else if (connection == secondConnection) { 
     // do something else 
    } 
} 

Une autre option un peu plus orienté objet serait de créer deux objets délégués différents, dont chacun sait comment traiter avec chaque chaque type de connexion. Ensuite, passez le délégué approprié lorsque vous créez chaque connexion. De cette façon, vous n'avez pas besoin de vérifier quelle connexion vous avez, car chaque délégué ne recevra que connectionDidFinishLoading: pour sa propre connexion.

+3

Ce n'est pas une solution très évolutive – coneybeare

+0

Pas si évolutive, mais belle solution, a résolu mon problème. Merci. – Krishna

+0

@cduhn est-il possible de sous-classer NSURLConnection et de lui donner une propriété ID en tant que NSString par exemple. De cette façon, si vous avez un nombre indéfini d'objets qui peuvent chacun avoir besoin d'une connexion (par exemple accepter une liste de demandes d'amis), tout ce que vous avez à faire est de définir l'ID de CustomNSURLconference comme la valeur qui identifie votre objet par exemple userID? De cette façon, vous ne devez pas avoir une instance de centaines de connexions NSURL. Je ne peux pas tester cela pour le moment c'est pourquoi je demande ici – pnizzle

1

Ce que je fais dans mes projets est de créer une classe wrapper pour la connexion. De cette façon, vous pouvez conserver une nouvelle instance pour chaque connexion dont vous avez besoin et conserver ces classes dans une autre classe de gestionnaire.

Quelque chose comme [AsynchronousConnection initWithURL: délégué: sélecteur:]

vous pouvez être assurer la bonne chose est appelée lorsque l'NSURLConnection se fait/a échoué.

2

Je préfère également des délégués différents pour chaque connexion. Bien que ce soit un peu de frais généraux. Heureusement, vous pouvez simplifier les choses en utilisant des blocs. C'est une nouvelle fonctionnalité qui n'existe pas encore dans le SDK standard, mais il existe déjà 3rd-party framework called PLBlocks. Here is an article sur la façon de les utiliser, il contient également un exemple pour NSURLConnection.

C'est le code client faisant la demande HTTP avec rappel de bloc:

NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]; 
[NSURLConnection sendAsynchronousRequest:req onCompletionDo: ^(NSData *data, NSURLResponse *res, NSError *err) { 
    NSLog(@"data: %ld bytes. res: %@, error: %@", (long)[data length], res, err); 
    [cell.activity stopAnimating]; 
}]; 
1

j'ai utilisé pour créer une enveloppe personnalisée autour NSURLConnection, aussi, mais je l'ai maintenant basculé sur ASIHTTPRequest. Ceci est une bibliothèque fantastique offrant beaucoup plus de flexibilité et de fonctionnalités que NSURLConnection. Jetez un coup d'oeil et essayez-le, ça vaut vraiment le coup.

+0

Je l'utilise aussi, mais avoir un emballage autour de ce – coneybeare

+0

J'avais l'habitude d'utiliser ASIHTTPRequest comme Eh bien, mais malheureusement à partir de Septembre 2011, il n'est plus soutenu par son auteur: http://allseeing-i.com/%5Brequest_release%5D –

+1

@DanJ: Une alternative très populaire ces jours-ci semble être [AFNetworking] (https://github.com/AFNetworking/AFNetworking/). –

0

S'il vous plaît ne se réfèrent pas https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

Aller au fichier NSURLConnection.h et vous trouverez ci-après. Une fois créée, une connexion NSURLConnection exécute une copie en profondeur de la demande NSURLRequest NSURLRequest. Cette copie est disponible via la méthode -originalRequest . Lorsque la connexion effectue la charge, cette demande peut changer suite à la canonisation du protocole ou en raison des redirections suivantes. -currentRequest peut être utilisé pour récupérer cette valeur. En fin de compte [connection currentRequest] .URL absoluteURL pourrait aider.

Cordialement, PRASANNA.

+0

Prasanna qu'est-ce que cela signifie? – Ranjit

Questions connexes