2009-11-21 10 views
2

J'écris un chargeur RSS et en utilisant le NSXMLParser pour analyser une page XML pour moi. Tout fonctionne bien.Comment faire la distinction entre NSURLConnections dans les méthodes de délégué?

C'est le code qui gère la connexion de manière asynchrone:

static NSString *feedURLString = @"http://www.example.com/data.xml"; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:feedURLString]]; 
feed = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease]; 

Maintenant, je suis en train d'ajouter un autre site à l'aide du même analysable code ci-dessus, mais je dois faire une action différente, sur un autre URL

Je suis en œuvre la fonction de délégué:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

le problème est que je ne peux pas comprendre quel site a été appelé, je ne suis arrivé les données.

Comment puis-je savoir à quelle URL la connexion est résolue?

Par exemple dans:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

Je peux vérifier la NSString en NSURL URL qui vient de la NSURLResponse mais dans la fonction ci-dessus, je ne peux pas.

Répondre

2

Si vous implémentez les deux méthodes de délégation, ne devriez-vous pas recevoir la dernière notification en premier? Si tel est le cas, vous pouvez associer la chaîne d'URL à NSURLConnection (qui sera supposée être différente pour chaque site) dans une variable d'instance et l'utiliser lorsque vous récupérez les données par la suite. Je suggérerais généralement un dictionnaire, bien que vous ne puissiez pas utiliser la connexion comme une clé dans un dictionnaire NS (Mutable) car il n'est pas conforme à NSCopying. Vous pouvez utiliser la chaîne URL comme clé, mais cela complique la recherche. Peut-être une paire de tableaux?

Plus précisément, pourquoi écrire un lecteur RSS à partir de zéro? Le 10.5+ vous pouvez use the PubSub.framework to do the work for you. Ce framework gère toutes sortes de formats bizarres et XML invalides, et peut vraiment vous faire gagner beaucoup de temps. Peut-être que c'est un bon choix pour ce que vous essayez de faire?

+2

Sur 10.5+, vous pouvez utiliser 'NSMapTable' pour gérer le mappage' NSURLConnection -> NSURL'. Sur 10.0 à 10.4, vous pourriez faire de même, mais vous seriez coincé en utilisant l'API C clunk ('NSCreateMapTable' et amis) au lieu d'une API Obj-C. Donnez certainement un aspect à la structure PubSub si vous avez besoin de 10.5+. –

+0

Excellent point, NSMapTable est une excellente alternative, et plus facile que de plonger dans CFMutableDictionary. :-) –