Ios 如何知道所有并发操作都已完成

Ios 如何知道所有并发操作都已完成,ios,objective-c,nsoperationqueue,nsoperation,nsblockoperation,Ios,Objective C,Nsoperationqueue,Nsoperation,Nsblockoperation,我的情况是: 我有用户 每个用户都有一些可以通过用户对象获取的历史数据 我想做的是: 最多2个用户必须同时获取其历史数据(这就是我希望使用NSOperationQueue的原因) 当任何用户完成获取其历史数据时,我需要得到通知 我需要在每个用户完成获取历史数据时得到通知 我的问题是: 既然我不能用下面的代码完成,我怎么能实现我想要做的事情呢 感谢您的帮助 NSOperationQueue *operationQueue = [[NSOperationQueue alloc]

我的情况是:

  • 我有用户
  • 每个用户都有一些可以通过用户对象获取的历史数据
我想做的是:

  • 最多2个用户必须同时获取其历史数据(这就是我希望使用NSOperationQueue的原因)
  • 当任何用户完成获取其历史数据时,我需要得到通知
  • 我需要在每个用户完成获取历史数据时得到通知
我的问题是:

  • 既然我不能用下面的代码完成,我怎么能实现我想要做的事情呢
感谢您的帮助

    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
    [operationQueue setMaxConcurrentOperationCount:2];

    for (User *user in users) {
        NSBlockOperation *operationObject = [NSBlockOperation blockOperationWithBlock:^{
            [user loadHistoryData:^{
                [NSNotificationCenter postNotificationToMainThread:@"oneUserFetchedHistory"];
            }];
        }];

        [operationQueue addOperation:operationObject];
    }
这个问题与此不同,因为我不想链接任何请求。我只想知道他们什么时候都完成了

这只有一个操作队列的完成块

这提供了一种使操作块等待对
loadHistoryData
的异步调用完成的方法。当写入时
setsuspend


我找不到满足我需要的答案。有吗

使用KVO观察队列的操作属性,然后通过检查[queue.operations count]==0,可以判断队列是否已完成

在执行KVO的文件中的某个地方,声明KVO的上下文,如下所示:

我使用了

将它们结合起来对我来说是这样的:

  NSOperationQueue *queue = [[NSOperationQueue alloc] init];
  [queue setMaxConcurrentOperationCount:1]; 
  // 1 is serial, more is concurrent

  queue.completionBlock = ^{
    [NSNotificationCenter postNotificationToMainThread:@"allUsersFetchedHistory"];
  };

  for (User *user in users){
   [queue addOperationWithAsyncBlock:^(AsyncBlockOperation *op) {
     [user loadHistoryData:^{
       [op complete];
       [NSNotificationCenter postNotificationToMainThread:@"oneUserFetchedHistory"];
      }];
    }];
  }

我已经编辑了我的问题。我不认为这个问题是重复的,但问题是这个方法不等待异步操作在块操作中完成@下一个人