Ios 如何在返回检查循环条件之前强制块完成
我有一个while循环来检查条件,但是里面的块从未完成,所以它是一个无限循环。这是我的密码Ios 如何在返回检查循环条件之前强制块完成,ios,multithreading,asynchronous,objective-c-blocks,dispatch-async,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:^{} ]
__block BOOL doContinue = YES;
while (doContinue) {
[NetworkHandle withParam:param url:url complete:^(id result, BOOL error)
{
if(...)
doContinue = NO;
} okHandler: ^{} retryHandler:^{} ];
}
但是从未调用过完整的块,因此while循环继续进行。
我尝试了这条线索中的所有答案:
但它们没有起作用
我目前的方法让应用程序永远等待
__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);
}
您可以使用
@synchronized{…}
块等待执行完成。完成后请告诉我。+[networkhandlewithparam:url:complete:okHandler:retryHandler:][/code>做什么?如果它在另一个线程/队列上异步执行,则只能等待它完成。如果它稍后在同一线程/队列上执行,则根据定义,它不能等待它完成。@DipenPanchasara我尝试过,但没有work@newacct此方法将param发送到url服务器进行处理并返回结果,检查结果是否告诉仍有数据要加载以再次调用[NetworkHandle…],如果没有数据,则设置doContinue=no,但完整的块永远不会完成,while循环在NetworkHandle获得结果之前检查doccontinueback@keduadoi:如果未调用完成块,则循环不应继续,因为它应被卡住,等待信号量发出信号。所以这没有意义。