如何触发NSOperationQueue并获得多个操作块的结果

我已经问过与NSOperationQueue有关的问题,但是我仍然在用multiples操作实现操作队列。 我有以下代码

  NSMutableArray * operationArray = [[NSMutableArray alloc] init]; for (int i =0; i<[documentModelList count]; i++) { DocumentModel * documentModel = [documentModelList objectAtIndex:i]; NSString *url = [NSString stringWithFormat:@"%@%@/%li", SERVER_URL, DOCUMENTS_DELETE,(long)documentModel.documentID]; [operationArray addObject:[AppHttpClient getDeleteRequest:nil urlQuery:url]]; } NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; // Set the max number of concurrent operations (threads) [operationQueue setMaxConcurrentOperationCount:operationArray.count]; [operationQueue addOperations:operationArray waitUntilFinished:NO]; + (AFHTTPRequestOperation *) getDeleteRequest:(NSDictionary *)headerParams urlQuery: (NSString*)action { NSString *jsonString = @""; NSString *authorizationValue = [self setAuthorizationValue:action]; NSString *language = @"en_US"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:language forHTTPHeaderField:@"Accept-Language"]; [request setValue:authorizationValue forHTTPHeaderField:@"authorization"]; [request setURL:[NSURL URLWithString:action]]; [request setTimeoutInterval:500.0]; [request setHTTPMethod:@"DELETE"]; NSMutableData *postBody = [NSMutableData data]; [postBody appendData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:postBody]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request]; operation.responseSerializer = [AFJSONResponseSerializer serializer]; return operation; } 

上面的代码在循环中创build操作并将其添加到operationArray ,然后将此操作数组添加到operationQueue 。 现在我想触发这个并获得整个数组的响应。

编辑

 + (void) gernalDeleteRequest:(NSDictionary *)headerParams urlQuery: (NSString*)action parameters:(NSDictionary*)params onComplete:(void (^)(id json, id code))successBlock onError:(void (^)(id error, id code))errorBlock { NSString *jsonString = @""; NSString *authorizationValue = [self setAuthorizationValue:action]; NSString *language = @"en_US"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:language forHTTPHeaderField:@"Accept-Language"]; [request setValue:authorizationValue forHTTPHeaderField:@"authorization"]; //convert parameters in to json data if ([params isKindOfClass:[NSDictionary class]]) { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:&error]; jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } [request setURL:[NSURL URLWithString:action]]; [request setTimeoutInterval:500.0]; [request setHTTPMethod:@"DELETE"]; NSMutableData *postBody = [NSMutableData data]; [postBody appendData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:postBody]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request]; operation.responseSerializer = [AFJSONResponseSerializer serializer]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSInteger statusCode = [operation.response statusCode]; NSNumber *statusObject = [NSNumber numberWithInteger:statusCode]; successBlock(responseObject, statusObject); NSLog(@"authentication success"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSInteger statusCode = [operation.response statusCode]; NSNumber *statusObject = [NSNumber numberWithInteger:statusCode]; id responseObject = operation.responseData; id json = nil; NSString *errorMessage = nil; if (responseObject) { json = [NSJSONSerialization JSONObjectWithData:responseObject options:kNilOptions error:&error]; errorMessage = [(NSDictionary*)json objectForKey:@"Message"]; }else{ json = [error.userInfo objectForKey:NSLocalizedDescriptionKey]; errorMessage = json; } errorBlock(errorMessage, statusObject); }]; [[NSOperationQueue mainQueue] addOperation:operation]; 

}

对于整体状态,您可以创build另一个操作,该操作可以是块操作,并使用addDependency:以确保在所有其他操作完成后运行。 在创build每个删除操作的循环中添加依赖项。

对于每个单独的状态,您需要使用setCompletionBlockWithSuccess:failure:获取有关结果的反馈。