2009-06-26 61 views
1

我使用ASINetworkQueue发送两个请求,这两个请求位于队列中。 我的问题是,当 请求失败/完成时,我无法收到通知。ASIHTTPRequest:在网络队列中接收来自几个请求的代理

代码:

[networkQueue cancelAllOperations]; 
    [networkQueue setShowAccurateProgress:YES]; 
    [networkQueue setUploadProgressDelegate:self.progressIndicator]; 
    [networkQueue setDelegate:self]; 
    [networkQueue setQueueDidFinishSelector:@selector(queueDidFinish)]; 


    NSURL *urlAttachment = [NSURL URLWithString:@"http://localhost/test1.xml"]]; 
    ASIFormDataRequest *requestFile = [[[ASIFormDataRequest alloc] initWithURL:urlAttachment] autorelease]; 
    [requestFile setFile:filePath forKey:@"attachment[test]"]; 
    [requestFile setDidFailSelector:@selector(test1WentWrong)]; 
    [requestFile setDidFinishSelector:@selector(test1Done)]; 
    [networkQueue addOperation:requestFile]; //queue is an NSOperationQueue 

    NSURL *url = [NSURL URLWithString:@"http://localhost/test2.xml"]]; 
    ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease]; 
    [request setPostValue:test.filename forKey:@"filename[test]" ]; 
    [request setDidFailSelector:@selector(test2WentWrong)]; 
    [request setDidFinishSelector:@selector(test2Done)]; 
    [networkQueue addOperation:request]; //queue is an NSOperationQueue 

    [networkQueue go]; 

test1WentWrong,test1Done,test2WentWrong,test2Done不叫。 尽管请求运行良好,并且queueDidFinish被调用。

回答

4

您需要设置各个请求的委托,而不是队列。

基本上,如果在队列上设置了didFinish和didFail选择器,则会调用队列的委托。如果你在请求中设置它们,那么调用请求的委托(你也可以同时执行这两个操作,在这种情况下,两者都被调用)。

在你的情况下,如果你想为两个请求使用相同的委托,但didFail/didFinish使用不同的选择器,我可以看到如果你没有设置委托,就可以调用队列的委托请求。也许我应该补充一点... :)

+0

本,非常感谢您的回答。我失明了;-)添加委托完美运作。感谢你提供如ASIHTTPRequest这样的包装。这是非常好的,方便使用。我喜欢。 – Stefan 2009-06-27 07:50:32