2009-06-26 9 views
1

Ich benutze ASINetworkQueue, um zwei Anfragen zu senden, die sich in einer Warteschlange befinden. Mein Problem ist, dass ich keine Benachrichtigungen erhalten kann, wenn eine Anfrage fehlschlägt/erledigt ist.ASIHTTPRequest: Delegaten von mehreren Anfragen innerhalb einer Netzwerkwarteschlange empfangen

Code:

[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 werden test2Done nicht genannt. Obwohl die Anfrage läuft und queueDidFinish wird aufgerufen.

Antwort

4

Sie müssen den Delegaten der einzelnen Anforderungen statt der Warteschlange festlegen.

Wenn Sie die didFinish- und didFail-Selektoren in der Warteschlange festlegen, wird grundsätzlich der Delegat der Warteschlange aufgerufen. Wenn Sie sie für die Anfrage festlegen, wird der Delegat der Anfrage aufgerufen (Sie können auch beides tun, in diesem Fall werden beide angerufen).

In Ihrem Fall, wo Sie den gleichen Delegaten für beide Anfragen verwenden möchten, aber verschiedene Selektoren für didFail/didFinish, kann ich sehen, dass der Delegat der Warteschlange sinnvoll wäre, wenn Sie keinen Delegaten festgelegt haben für die Anfrage. Vielleicht sollte ich das hinzufügen ... :)

Ben

+0

Ben, vielen Dank für Ihre Antwort. Ich war blind ;-) Der Delegierte funktionierte perfekt. Danke für solch einen großartigen Wrapper wie ASIHTTPRequest. Es ist sehr schön und praktisch zu bedienen. Ich mag das. – Stefan

+0

@Stefan Ich bin auch mit Ihrem Problem konfrontiert.und nicht in der Lage, es zu beheben.Können Sie bitte aktualisieren Sie Ihre Antwort in der Frage.Vielen Dank – Jeff

Verwandte Themen