J'ai une instance de ASINetworkQueue et j'ai ajouté des instances de ASIHTTPRequest à la file d'attente; Pendant ce temps, j'ai des méthodes de délégués définis pour la file d'attente, ainsi que chaque demande:ASIHTTPRequest: Erreur lors de la tentative d'invocation de la méthode déléguée
[submittingReportQueue setDelegate:self];
[submittingReportQueue setRequestDidFailSelector:@selector(submitReportQueueWentWrong:)];
[submittingReportQueue setQueueDidFinishSelector:@selector(submitReportQueueFinished:)];
et dans une boucle I ajouté à la file d'attente demande, ajouter appel [submittingReportQueue aller] en dehors de la boucle.
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
NSString *auth = [[AuthenticationManager sharedInstance] authenticationHeaderValue];
request addRequestHeader:@"Authorization" value:auth];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
NSString *jsonString =[self jsonStringForExpenseReport:report];
[request appendPostData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
[request setDelegate:self];
[request setUserInfo:[NSDictionary dictionaryWithObject:report forKey:@"Report"]];
[request setDidFailSelector:@selector(submitReportRequestWentWrong:)];
[request setDidReceiveDataSelector:@selector(submitReportRequestDone:)];
[requests addObject:request];
[submittingReportQueue addOperation:request];
Voici mes méthodes de délégués:
- (void)submitReportQueueWentWrong:(ASINetworkQueue *)queue
{
NSLog(@"Submit Report WentWRong");
//
- (void)submitReportQueueFinished:(ASINetworkQueue *)queue
{
NSLog(@"Submit Report QueueFinished");
}
//
- (void)submitReportRequestWentWrong:(ASIHTTPRequest *)request
{
NSLog(@"Submit Report Queue went wrong");
}
//
- (void)submitReportRequestDone:(ASIHTTPRequest *)request
{//do work here}
Cependant ASIHTTPRequest.m jette exception après un bloc de code:
// Does the delegate want to handle the data manually?
if ([[self delegate] respondsToSelector:[self didReceiveDataSelector]]) {
NSMethodSignature *signature = [[[self delegate] class]
instanceMethodSignatureForSelector:[self didReceiveDataSelector]];
NSInvocation *invocation = [[NSInvocation invocationWithMethodSignature:signature]
retain];
[invocation setSelector:[self didReceiveDataSelector]];
[invocation setArgument:&self atIndex:2];
NSData *data = [NSData dataWithBytes:buffer length:bytesRead];
[invocation setArgument:&data atIndex:3];
[invocation retainArguments];
[self performSelectorOnMainThread:@selector(invocateDelegate:) withObject:invocation waitUntilDone:[NSThread isMainThread]];
[invocation setArgument: & atIndex de données: 3 ] throws Exception, erreur message est 'NSInvalidArgumentException', raison: '*** - [NSInvocation setArgument: atIndex:]: index (3) hors limites [-1, 2]'
Qu'est-ce que je faire le mal?
Merci `