如何在返回检查循环条件iOS

时间:2015-05-26 09:50:51

标签: ios multithreading asynchronous objective-c-blocks dispatch-async

我有一个while循环来检查条件但是内部的块永远不会完成所以它是一个无限循环。这是我的代码

__block BOOL doContinue = YES;
while (doContinue) {
  [NetworkHandle withParam:param url:url complete:^(id result, BOOL error)
  {
    if(...)
       doContinue = NO;
  } okHandler: ^{} retryHandler:^{} ];
}

但是从未调用完整的块,因此while循环继续运行。 我尝试了这个帖子中的每个答案:Wait for async task to finish completion block before returning in app delegate 但他们没有用。

我目前的方法让app永远等待

__block BOOL doContinue = YES;
while (doContinue) {
  dispatch_semaphore_t sema = dispatch_semaphore_create(0);

  [NetworkHandle withParam:param url:url complete:^(id result, BOOL error)
  {
    if(...)
       doContinue = NO;
    dispatch_semaphore_signal(sema);
  } okHandler: ^{} retryHandler:^{} ];

  dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
  dispatch_release(sema);
}

0 个答案:

没有答案