Cocoa 如何同步等待[NSL]完成

Cocoa 如何同步等待[NSL]完成,cocoa,Cocoa,我需要使用移动垃圾箱上的文件,但我必须等待完成,将所有代码放入completionHandler并不是那么简单,主要是因为包含对recycleURLs的调用的方法必须返回一个值 我已经找到了一个肮脏的方法来实现这个结果,但我知道是否存在更好的解决方案。 我的解决方案使用条件变量和runloop 代码在单独的线程中运行,而不是在主线程中运行 __block BOOL waitCompletion = YES; void (^myCompletionHandler)(NSDictionary *n

我需要使用移动垃圾箱上的文件,但我必须等待完成,将所有代码放入completionHandler并不是那么简单,主要是因为包含对recycleURLs的调用的方法必须返回一个值

我已经找到了一个肮脏的方法来实现这个结果,但我知道是否存在更好的解决方案。
我的解决方案使用条件变量和runloop

代码在单独的线程中运行,而不是在主线程中运行

__block BOOL waitCompletion = YES;
 void (^myCompletionHandler)(NSDictionary *newURLs, NSError *error) =
  ^(NSDictionary *newURLs, NSError *recycleError) {
      // do some stuff and before exits from method change waitCompletion value
        waitCompletion = NO;
};
[[NSWorkspace sharedWorkspace] recycleURLs:myURLToDelete
                 completionHandler:myCompletionHandler];
// loop until completionHandler finishes
while (waitCompletion && CFRunLoopRunInMode(kCFRunLoopDefaultMode, 2.0, true)) {
    ; //nop
}

// we can continue after recycleURLs
...
...

“我必须等待[等待]完成”为什么?我的代码的算法需要等待,因为它递归地处理哪些文件垃圾和做其他事情。我不想在CompletionHandler中进行递归调用听起来解决方案是将其设置为非递归,然后在CompletionHandler中执行。