Удалить все запросы из ASINetWorkQueue

Кто-нибудь знает способ постоянного удаления запросов из ASINetworkQueue? Функция сброса не работает. Я пытаюсь сделать следующее

- (void)fillAndRunQueue:(ASINetworkQueue*)queue requests:(NSArray*)requests {  
    for (ASIHTTPRequest* request in requests) {  
        if ([request check]) { // Valid request => add it to the queue    
            [queue addOperation:request];  
        } else { // Invalid request => cancel immediatelly  
            // HOW TO REMOVE ALL PREVIOUS REQUESTS FROM THE QUEUE??  
            return;  
        }  
    }  

    [queue go];  
}

person hennes    schedule 11.09.2010    source источник


Ответы (1)


Я вижу два очевидных варианта:

[queue cancelAllOperations];

или если вы хотите больше контроля:

[request cancel];

для каждого запроса, который вы хотите «удалить» (технически это не удаляет их, но может иметь достаточно близкий эффект для ваших целей).

Хотя, я думаю, [queue reset]; тоже должно работать - может быть, вы можете объяснить, что именно происходит, когда вы пытаетесь его использовать?

Если ничего не помогает, освобождение, а затем повторное создание очереди должно удалить все.

Обновить

Чтобы еще больше объяснить, я не думаю, что на самом деле возможно удалить элементы из NSOperationQueue, только чтобы отменить их. (ASINetworkQueue является подклассом NSOperationQueue.)

Яблочные документы здесь:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html

person JosephH    schedule 11.09.2010
comment
Прежде всего, спасибо за ответ. Проблема с [queue cancelAllOperations], [queue reset] и [request cancel] (для каждого запроса) заключается в том, что все они оставляют количество запросов в очереди неизменным. Я отслеживал последний с помощью [queue requestCount], и он всегда остается неизменным. - person hennes; 11.09.2010
comment
Чтобы быть более ясным, я хочу полностью очистить очередь. Конечно, для этого можно было бы освободить и воссоздать очередь, но я надеялся, что найдется более элегантный способ. - person hennes; 11.09.2010
comment
Другой обходной путь — сначала проверить все запросы, а затем сразу добавить их в очередь. Однако исходный вопрос (как вообще убрать запросы из очереди) остался. - person hennes; 11.09.2010
comment
Я думаю, что ответ на этот вопрос заключается в том, что на самом деле невозможно удалить элементы из NSOperationQueue - я обновил свой ответ, чтобы объяснить и дать ссылку на документы. - person JosephH; 12.09.2010
comment
Да, кажется, ты прав в этом. Думаю, я выберу подход проверки всех запросов до того, как они будут фактически добавлены в очередь. Большое спасибо! - person hennes; 12.09.2010