J'ai l'intention de créer 2 requêtes en utilisant NSURLConnection. Lorsque le serveur répond et appelle connectionDidFinishLoading, il passe dans la connexion en tant que paramètre, mais comment identifier la connexion transmise?Création de plusieurs NSURLConnections. Comment identifier quel appel asynchrone
Répondre
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.
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é.
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];
}];
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.
Je l'utilise aussi, mais avoir un emballage autour de ce – coneybeare
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 –
@DanJ: Une alternative très populaire ces jours-ci semble être [AFNetworking] (https://github.com/AFNetworking/AFNetworking/). –
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.
Prasanna qu'est-ce que cela signifie? – Ranjit
- 1. WPF Appel MessageBox.Show asynchrone
- 2. Comment identifier quel appel de fonction a déclenché une exception particulière dans un bloc try?
- 3. Appel asynchrone à WCF avec C#?
- 4. Comment puis-je tester une méthode contenant un appel asynchrone?
- 5. Comment signaler un délai d'attente dans un appel asynchrone?
- 6. Comment faire un appel à mon service WCF asynchrone?
- 7. Plusieurs appels de service Web asynchrone séquentiels à partir d'une page ASP.NET asynchrone?
- 8. plusieurs webrequests de manière asynchrone dans asp.net?
- 9. Comment identifier quel contrôle a généré l'événement Click?
- 10. Appel du service WCF de manière asynchrone dans une boucle
- 11. Appel de procédure asynchrone avec DB2 .NET Data Provider
- 12. Annulation d'un appel asynchrone d'un service Web ASP.NET
- 13. Comment identifier une dépendance manquante
- 14. Création de plusieurs versions d'une application iPhone
- 15. Appel asynchrone pour service WCF hébergé dans le service Windows
- 16. Appel SP distant via des serveurs liés. Asynchrone ou non?
- 17. Objective-C: Appel sélecteurs avec plusieurs arguments
- 18. Appel de service Web asynchrone depuis le client Web asp.net 2.0 vers le service Web WCF (problème asynchrone)
- 19. Comment identifier et utiliser OSType à Cocoa
- 20. Comment identifier le bouton presse parmi plusieurs bouton dans l'objectif c
- 21. Identifier le clavier
- 22. Création simultanée de plusieurs projets par CruiseControl.NET
- 23. identifier le problème mysql
- 24. Appel des services Web .NET de manière asynchrone à partir de Java
- 25. Création de plusieurs objets de UIImagePickerController
- 26. Appel d'une fonction plusieurs fois dans jQuery
- 27. Jquery: un appel déclenché par plusieurs événements
- 28. Outil de création MIME en plusieurs parties
- 29. Performance création de plusieurs petits fichiers
- 30. Création de solutions BizTalk avec plusieurs projets
Ce n'est pas une solution très évolutive – coneybeare
Pas si évolutive, mais belle solution, a résolu mon problème. Merci. – Krishna
@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