2011-12-01 5 views
0

J'ai une vue de connexion simple que lorsque vous vous connectez avec succès, il va chercher un certain json d'un serveur et l'insère dans une base de données. Alors im en utilisant:iOS - en utilisant plusieurs connexions

// NSURLRequest 

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

- (void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // insert into db 
} 

Je veux une deuxième connexion maintenant de télécharger des documents, comment puis-je utiliser les méthodes ci-dessus pour passer une autre URL et traiter les données d'une manière différente (non JSON) pour la 2ème NSURLRequest en la même vue?

Répondre

1

Eh bien, la première chose que vous devez faire est de mettre le delegate de votre nouveau NSURLConnection à nouveau dans cette classe, donc les méthodes sont appelées (mais vous le saviez). Si vous faites une à la fois, stocker un pointeur sur le NSURLRequest actif, quelque chose comme:

@property (nonatomic, assign) NSURLRequest *activeURLRequest; 

vérifier ensuite l'URL de la demande active pour différencier les demandes:

- (void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSString *urlPath = [[activeURLRequest URL] path]; 
    if([urlPath isEqualToString:@"http://my.url.string/1"]) 
     // insert into DB 
    else if([urlPath isEqualToString:@"http://my.url.string/2"]) 
     // do the other thing 
} 

Notez que vous pouvez Comparez également l'objet NSURL directement avec une version enregistrée de celui-ci en utilisant isEqual: (ou l'opérateur ==).

Si vous en faites plus d'une à la fois, vous avez besoin d'un autre moyen de différencier. Je recommande d'utiliser ASIHTTPRequest ou AFNetworking pour le rendre plus facile, mais si vous voulez le faire en utilisant les bibliothèques d'Apple, vous devrez en extraire plusieurs threads, conserver un enregistrement du numéro de thread qui gère l'URL de requête et utiliser cette information votre méthode connectionDidFinishLoading:.

+0

Je vois ce que vous voulez dire, je vais jouer avec cette idée d'URL active et traiter les informations en fonction de l'URL. Je ne voulais pas utiliser ASIHTTPRequest (ce qui est génial) mais je pense que ce n'est plus supporté? c'est-à-dire aucune mise à jour IOS5 par exemple. À votre santé. – fes

+0

Je suis d'accord 'ASIHTTPRequest' n'est plus supporté, mais cela ne veut pas dire qu'il est cassé. Cela fonctionne toujours très bien pour moi, il y a beaucoup de codage finnicky thread-safe qui a été affiné au fil des ans. C'est aussi le moyen le plus simple de mettre en cache des requêtes particulières sur un disque dans un emplacement personnalisé (que j'ai vu) et il gère très bien les redirections HTTP. – darvids0n

+0

Avez-vous des problèmes avec ASIHTTPRequest pour iOS5? Je me souviens d'avoir fait une construction et de lancer des avertissements épouvantables dont je n'avais aucune idée. – fes

Questions connexes