Método de delegado ASINetworkQueue no llamado
Frecuentes
Visto 1,386 veces
1
En mi aplicación estoy usando el método ASINetworkQueue para descargar archivos. Tengo n número de botones y para cada clic de botón se crearán diferentes colas con múltiples solicitudes y se iniciará la descarga de forma asíncrona (descarga múltiple). Está funcionando bien, pero no pude rastrear cuándo se completa cada cola. He usado,
[self.myQueue cancelAllOperations];
[self.myQueue setDownloadProgressDelegate:currentProgress];
[self.myQueue setDelegate:self];
[self.myQueue setShowAccurateProgress:YES];
[self.myQueue setRequestDidFinishSelector:@selector(requestFinished:)];
[self.myQueue setQueueDidFinishSelector:@selector(queueComplete:)];
y solicitudes añadidas como,
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:str]];
[request setDownloadProgressDelegate:currentProgress];
[request setShowAccurateProgress:YES];
[request setDelegate:self];
[request shouldContinueWhenAppEntersBackground];
[request allowResumeForFileDownloads];
[request startAsynchronous];
[self.myQueue addOperation:request];
y última, [self.myQueue go];
y el método delegado es
- (void)queueComplete:(ASINetworkQueue *)queue
{
NSLog(@"Queue completed");
}
pero no se llama al final. ¿Qué salió mal aquí? ¿Alguna idea? Y también, si hay varias colas funcionando al mismo tiempo, ¿cómo podemos diferenciar qué cola se completa al final?
Edit:
- (void)download{
UIImageView *image = (UIImageView *)[mainView viewWithTag:selectedTag];
for (UIProgressView *currentProgress in [image subviews]) {
if ([currentProgress isKindOfClass:[UIProgressView class]]) {
NSLog(@"Prog tag: %d",currentProgress.tag);
if(currentProgress)
{
currentProgress.progress = 0.0;
[[self myQueue] cancelAllOperations];
[self setNetworkQueue:[ASINetworkQueue queue]];
[[self myQueue] setDownloadProgressDelegate:currentProgress];
[[self myQueue] setDelegate:self];
[[self myQueue] setShowAccurateProgress:YES];
ASIHTTPRequest *request;
[myQueue setQueueDidFinishSelector:@selector(queueComplete:)];
for (int h = 0; h < [urlArray count]; h++) {
request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[urlArray objectAtIndex:h]]];
[[self myQueue] addOperation:request];
}
[[self myQueue] go];
}
}
}
}
1 Respuestas
1
Está iniciando la solicitud antes de agregarla a la cola.
[request startAsynchronous];
El inicio de la solicitud solo debe ser manejado por la cola. Así que elimine esa línea y se debe llamar a la devolución de llamada completa.
Cuando tiene más de una cola, debe mantener una referencia a cada cola. Podría ponerlos en un NSMutableArray. Luego, en la devolución de llamada completa, puede verificar qué cola está completa comparándola con las colas en su matriz.
EDIT:
Parece que olvidaste configurar tu myQueue
iVar, así fue nil
e ignoró todas las llamadas a métodos. Así que agrega:
self.myQueue = [ASINetworkQueue queue];
Para tener más de una cola en una matriz:
self.queues = [NSMutableArray array] // queues is a retained property
ASINetworkQueue *queue = [ASINetworkQueue queue];
[queues addObject:queue];
contestado el 22 de mayo de 12 a las 10:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas iphone delegates download asihttprequest network-protocols or haz tu propia pregunta.
Lo intenté ocultando [solicitud de inicio asincrónico]; luego, no se realizó la descarga. luego oculté el [request startAsynchronous]; y escondido [self.myQueue go]; , aún así se realizó la descarga. Entonces, parece que la cola no tiene ningún control. ¿Alguna idea? - Mithun
Agregue el resto de su código (cómo inicia la cola, etc.) a su pregunta. Entonces es más fácil identificar el problema: joern
¿Estás haciendo algo como esto?: self.networkQueue = [ASINetworkQueue queue]; - joern
pruebe self.myQueue = [ASINetworkQueue queue]; Muévelo también fuera del bucle for. Solo necesitas hacer eso una vez. - joern
si, ese era el tema. Agregué [self setMyQueue:[ASINetworkQueue queue]]; y ahora está funcionando. Gracias por señalar el problema correcto :) y ¿cómo puedo agregar la referencia de la cola en una matriz? - Mithun