ASIHTTPRequest: recevoir des délégués de plusieurs demandes dans une file d'attente réseau
-
20-08-2019 - |
Question
J'utilise ASINetworkQueue pour envoyer deux requêtes, qui sont dans une file d'attente. Mon problème est que je ne peux pas recevoir de notifications lorsque une requête échoue / est terminée.
Code:
[networkQueue cancelAllOperations];
[networkQueue setShowAccurateProgress:YES];
[networkQueue setUploadProgressDelegate:self.progressIndicator];
[networkQueue setDelegate:self];
[networkQueue setQueueDidFinishSelector:@selector(queueDidFinish)];
NSURL *urlAttachment = [NSURL URLWithString:@"http://localhost/test1.xml"]];
ASIFormDataRequest *requestFile = [[[ASIFormDataRequest alloc] initWithURL:urlAttachment] autorelease];
[requestFile setFile:filePath forKey:@"attachment[test]"];
[requestFile setDidFailSelector:@selector(test1WentWrong)];
[requestFile setDidFinishSelector:@selector(test1Done)];
[networkQueue addOperation:requestFile]; //queue is an NSOperationQueue
NSURL *url = [NSURL URLWithString:@"http://localhost/test2.xml"]];
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setPostValue:test.filename forKey:@"filename[test]" ];
[request setDidFailSelector:@selector(test2WentWrong)];
[request setDidFinishSelector:@selector(test2Done)];
[networkQueue addOperation:request]; //queue is an NSOperationQueue
[networkQueue go];
test1WentWrong, test1Done, test2WentWrong, test2Done ne sont pas appelés. Bien que la requête s'exécute correctement et que queueDidFinish soit appelée.
La solution
Vous devez définir le délégué des requêtes individuelles plutôt que la file d'attente.
En gros, si vous définissez les sélecteurs didFinish et didFail dans la file d'attente, le délégué de la file d'attente est appelé. Si vous les définissez sur la demande, le délégué de la demande est appelé (vous pouvez également faire les deux, auquel cas les deux sont appelés).
Dans votre cas, où vous souhaitez utiliser le même délégué pour les deux demandes, mais des sélecteurs différents pour didFail / didFinish, je peux voir qu'il serait logique que le délégué de la file d'attente soit appelé si vous ne définissez pas de délégué pour la demande. Je devrais peut-être ajouter ceci ...:)
Ben