ASIHTTPRequest: receber os delegados de vários pedidos dentro de uma fila de rede
-
20-08-2019 - |
Pergunta
Eu uso ASINetworkQueue para enviar dois pedidos, que estão em uma fila. Meu problema é que eu não sou capaz de receber notificações quando um pedido falhar / é feito.
Código:
[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 não são chamados. Embora o pedido corre bem e queueDidFinish é chamada.
Solução
Você precisa definir o delegado dos pedidos individuais em vez de fila.
Basicamente, se você definir os seletores didFinish e didFail na fila, delegado da fila é chamado. Se você colocá-los no pedido, delegado do pedido é chamado (Você também pode fazer as duas coisas, caso em que ambos são chamados).
No seu caso, onde você quiser usar o mesmo delegado para ambos os pedidos, mas diferentes seletores para didFail / didFinish, eu posso ver isso faria sentido para delegado da fila a ser chamado se você não definir um delegado para o pedido. Talvez devo acrescentar isso ...:)
Ben