我需要使用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
...
...