Как лучший способ отслеживать несколько экземпляров ASIHTTTREQUEST?

У меня есть какой-то код, который отправляет несколько ASIHTTTREQUESTS для загрузки и загрузки данных в контроллере просмотра. Когда контроллер просмотра получает DEALOC'D, он должен убирать все незаконченные запросы, установив делегат в Nil.

- (void)viewDidLoad
{
        // send multiple requests
        [self sendRequest:someURL];
        [self sendRequest:someURL];
        [self sendRequest:someURL];
        [self sendRequest:someURL];
}

- (void)sendRequest:(NSString*)url
{
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        [request setDelegate:self]; 

        ASINetworkQueue *requestQueue = [ASINetworkQueue queue];
        [requestQueue setMaxConcurrentOperationCount:2];
        [requestQueue setDelegate:self];
        [requestQueue addOperation:request];
        [requestQueue go];
}

- (void)dealloc
{
    NSLog(@"cancel all operations");
    for (ASIHTTPRequest *req in ASIHTTPRequest.sharedQueue.operations)
    {
        [req cancel];
        [req setDelegate:nil];
    }

    [super dealloc];
}

Тем не менее, если я POP этой проверки просмотра до того, как все операции завершится, я получаю «сообщение, отправленное на Delected Example» в ASIHTTPREQUEST.M, жалуюсь, что делегат ушел в код ниже.

/* ALWAYS CALLED ON MAIN THREAD! */
- (void)reportFailure
{
    ***crash here --> if (delegate && [delegate respondsToSelector:didFailSelector]) {
        [delegate performSelector:didFailSelector withObject:self];
    }
    if (queue && [queue respondsToSelector:@selector(requestFailed:)]) {
        [queue performSelector:@selector(requestFailed:) withObject:self];
    }
    #if NS_BLOCKS_AVAILABLE
    if(failureBlock){
        failureBlock();
    }
    #endif
}

Как я могу работать вокруг этого?

0
задан Jiho Kang 10 September 2011 в 00:35
поделиться