【问题标题】:Remove all requests from ASINetWorkQueue从 ASINetWorkQueue 中删除所有请求
【发布时间】:2010-09-11 13:30:13
【问题描述】:

有人知道以持久方式从 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];  
}

【问题讨论】:

    标签: iphone asihttprequest nsoperationqueue


    【解决方案1】:

    我可以看到的两个明显选项是:

    [queue cancelAllOperations];
    

    或者如果您想要更多控制权:

    [request cancel];
    

    对于您要“删除”的每个请求(从技术上讲,这并不是删除它们,但可能对您的目的具有足够接近的效果)。

    不过,我认为[queue reset]; 也应该可以工作 - 也许您可以准确解释一下当您尝试使用它时会发生什么?

    如果一切都失败了,释放然后重新创建队列应该会删除所有内容。

    更新

    为了进一步解释,我认为实际上不可能从 NSOperationQueue 中删除项目,只能取消它们。 (ASINetworkQueue 是 NSOperationQueue 的子类。)

    苹果文档在这里:

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

    【讨论】:

    • 首先感谢您的回复。 [queue cancelAllOperations]、[queue reset] 和 [request cancel](针对每个请求)的问题在于它们都使队列中的请求数保持不变。我确实使用 [queue requestsCount] 监视了后者,它始终保持不变。
    • 更清楚地说,我想要的是完全清空队列。当然,释放和重新创建队列是一种选择,但我希望有一种更优雅的方式。
    • 另一种解决方法是首先验证所有请求,然后立即将它们添加到队列中。但是,最初的问题(通常如何从队列中删除请求)仍然存在。
    • 我认为答案是实际上不可能从 NSOperationQueue 中删除项目 - 我已经更新了我的答案以解释并链接到文档。
    • 是的,看来你是对的。我想我会采用在所有请求实际添加到队列之前验证所有请求的方法。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多