3

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

我找到了一种肮脏的方式来实现结果,但我会知道是否存在更好的解决方案。
我的解决方案使用条件变量和运行循环

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

__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
...
...
4

0 回答 0