Método de delegado ASINetworkQueue no llamado

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];
            }
        }
    }
}

preguntado el 22 de mayo de 12 a las 07:05

1 Respuestas

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

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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.